Total Accepted: 73109
Total Submissions: 218887
Difficulty: Medium
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 Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(target < matrix[0][0]||target > matrix[matrix.length-1][matrix[0].length-1]) return false;
boolean res = false;
boolean temp = false;
for (int i = 0;i < matrix.length; i++) {
if (target <= matrix[i][matrix[0].length-1]){
temp = searchRange(matrix[i], target);
if (temp == true) {
res = true;
break;
}
}
}
return res;
}
public boolean searchRange(int[] nums, int target) {
int low = 0;
int high = nums.length-1;
int mid = 0;
boolean r = false;
while(low <= high) {
mid = (low + high)/2;
if (nums[mid] == target) {
r = true;
break;
}
else if (nums[mid] < target) low = mid+1;
else high = mid -1;
}
//System.out.println(r);
return r;
}
}