矩阵问题一:查找元素
例如:
2 3 4 7
4 4 4 8
5 7 7 9
【要求】时间复杂度为O(N+M),额外空间复杂度为O(1).
【思路】根据数据顺序特点(从左到右递增,从上到下递增),从左下角或右上角开始比较,可以使得 每更新一步可以排除一部分数据;
进而提升效率;
从左下角开始,若当前元素 > key,则向上查找;若当前元素< key,则向右查找;若当前元素 = key,则返回,停止查找;
从右上角开始,若当前元素 > key,则向左查找;若当前元素< key,则向下查找;若当前元素 = key,则返回,停止查找;
【解答】
public static boolean isInMstarix(int[][] arr,int key){
//从右上角开始查找
int m = arr.length-1;
int n = arr[0].length-1;
int row = 0,col = n;
while( row <= m && col >= 0){
if(arr[row][col] < key){
row++; // 若比 key 小,向下继续查找
}
else if(arr[row][col]> key){
col--;// 若比 key 大,向左继续查找
}
else if(arr[row][col] == key) return true;
}
return false;
}