您的位置:首页 > 其它

Search a 2D Matrix

2015-09-22 15:12 274 查看
题意:

给定一个矩阵,每行的元素从左到右一次增大,每一行的首元素大于上一行最末尾的元素;在这样的矩阵中查找value

分析:

1)、首先可以在最后一列进行二分查找,如果第mid行的最后一个元素大于value,而第一个元素小于value,则说明要查找的元素只可能在mid行,然后再慈航进行二分查找

2)如果第mid行的最后一个元素大于value,第一个元素也大于value,说明value在mid行之前的几行,则right--;

3)如果第mid行的最后一个元素小于value,说明value在mid行之后的几行,则left++;

public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int rows = matrix.length;
if(rows <= 0){
return false;
}
int cols = matrix[0].length;
int left = 0;
int right = rows - 1;
while(left <= right){
int mid = (left + right) / 2;
int tmp1 = matrix[mid][cols - 1];
int tmp2 = matrix[mid][0];
if(tmp1 == target || target == tmp2){
return true;
}
if(tmp1 > target && tmp2 < target){
return searchMatrix(matrix[mid], target);
}
else if(tmp2 > target){
right--;
}
else if(tmp1 < target){
left++;
}
}
return false;
}
public boolean searchMatrix(int[] a, int target) {
int left = 0;
int right = a.length - 1;
while(left <= right){
int mid = (left + right) / 2;
if(a[mid] == target){
return true;
}
if(a[mid] > target){
right--;
}
else{
left++;
}
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: