【LeetCode-74】Search a 2D Matrix

来源:互联网 发布:天津关键字优化公司 编辑:程序博客网 时间:2024/06/05 09:49

这道题思想很简单,用两次二分查找就好了,做起来还是有点让人头疼的,总是这越界那越界的,不过最后还是终于搞定了

public static boolean searchMatrix(int[][] matrix, int target) {if(target < matrix[0][0] || target > matrix[matrix.length - 1][matrix[0].length - 1]){return false;}//求的是indexint index = 0;//如果第一列最后一个数小于target,则直接搜索最后一行if(matrix[matrix.length - 1][0] <= target){index = matrix.length - 1;return find(matrix,target,index);}//否则,搜索第一列,找到最后一个比target小的数的indexelse{int begin = 0,end = matrix.length - 1;while(begin <= end){int mid = begin + (end - begin) / 2;if(matrix[mid][0] > target){end = mid - 1;}else if(matrix[mid][0] < target){begin = mid + 1;}else{return true;}}index = begin - 1;if(matrix[0].length == 1){return false;}else{return find(matrix,target,index);} }    } private static boolean find(int[][] matrix, int target,int index){int left = 0,right = matrix[0].length - 1;while(left <= right){int mid = left + (right - left) / 2;if(matrix[index][mid] < target){left = mid + 1;}else if(matrix[index][mid] > target){right = mid - 1;}else{return true;}}return false;}


0 0