Search a 2D Matrix----easy

来源:互联网 发布:视频相册制作软件 编辑:程序博客网 时间:2024/06/06 09:02

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

  • Integers in each row are sorted from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

For example,

Consider the following matrix:

[  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]

Given target = 3, return true.

题目不难代码如下

public class Sa2M {public static void main(String[] args){//int matrix[][] = {{1,3,5,7},{10,11,16,20},{23,30,34,50}};int matrix[][] = {{1,3}};int target = 2;System.out.println(searchMatrix(matrix,target));}public static boolean searchMatrix(int[][] matrix, int target) {int m,n;m = matrix.length;n = matrix[0].length;int mid;int low,high;for(int i=0;i<m;i++){if(target>= matrix[i][0] && target<= matrix[i][n-1]){low = 0;high = n-1;while(low<=high){mid = (low +high)/2;if(matrix[i][mid] < target){low = mid+1;}else if(matrix[i][mid] >target){high = mid-1;}else{return true;}}}}return false;    }}
遍历二维数组行,找到目标值所在区间,然后二分查找

太久没做题什么都慢,二分的时候low和high的更新中直接赋值为mid,结果发现在low和high相差为1的时候循环无法结束了

更新的时候mid值已经做过判断,新区间内不应包含mid值,同时在low和high相差1时再次进入循环两值相等,再再次就无法进入循环退出了


0 0
原创粉丝点击