查找有序二维数组中的元素
2017-04-10 15:52
176 查看
给定一个已排序的二维数组array,在其中查找一个元素value
查找策略如下图:
(1)将value和数组的右上角的值比较,如果大于右上角的值,则移除数组的第一行。
(2)将value和数组的左下角的值比较,如果大于左下角的值,则移除数组的第一列。
(3)直到查找完毕,已经找不到符合(1)(2)的情况后,或者数组只剩下一个元素
(4)得到一个较小的二维数组,再遍历该数组即可。
/** * Created by wuchao on 17-3-29. */ import javax.swing.text.html.HTMLDocument; import java.util.*; public class test { public static int arr[][] = {{1,2,3,4},{5,6,7,8},{9,10,12,13},{14,15,16,17}}; public static void main(String[] args) { System.out.println(find(arr,1)); } public static boolean find(int[][] array,int value){ if(array==null) return false; int m = array.length;//行 int n = array[0].length;//列 int[] right = {0,n-1};//右上角 int[] left = {m-1,0};//左下角 while(true){ if(right[0]==left[0]&&right[1]==left[1]){ if(array[right[0]][right[1]]==value){ return true; }else{ return false; } } if(array[right[0]][right[1]]<value){ right[0]=right[0]+1; }else if(array[left[0]][left[1]]<value){ left[1]=left[1]+1; }else{ //跳法这里说明已经找完 break; } } for(int i=right[0];i<=left[0];i++){ for(int j=left[1];j<=right[1];j++){ if(array[i][j]==value) return true; } } return false; } }
相关文章推荐
- 有序二维数组查找元素
- 有序二维数组查找元素
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- 在查找有序二维数组中查找元素
- 在有序二维数组快速查找元素
- 有序二维数组中查找指定元素
- 3 - 在有序二维数组中查找元素
- [面试] 算法(三) —— 有序二维数组的查找
- 算法:有序数组删除重复元素,和查找等值键的问题
- merge两个有序数组 & 查找一个有序数组中指定元素
- 有序二维数组的查找
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
- 有序数组旋转后的元素值查找
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 面试题 -- 有序二维数组的查找
- 在两个有序链表中查找第K大元素。
- 二分搜索专题2-在有序二维数组中搜索一个元素
- //二分法查找数组中的某个元素(二分法查找时数组元素必须是有序的)
- 折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。