【题目】给定一个指定的MxN的整型矩阵arr,和一个整数K,arr的每一行每一列都是排好序的,实现一个函数,判断K是否在矩阵arr中
【举例】
输入10,返回true;输入20,返回false
【要求】时间复杂度为O(M+N),空间复杂度为O(1)
【题解】
(1)从矩阵的右上角开始寻找(row = 0,col = N-1)
(2)比较当前数arr[row][col]与K的大小
- 如果等于K,返回true
- 如果大于K,说明当前数所在的列中,处于当前数下方的数均比K大,所以没有必要继续停留在第col行上,令col -= 1,重复步骤2
- 如果比K小,说明当前数所在行中,处于当前数左边的数都比K小,所以没有必要停留在col列了,令col += 1,重复步骤2
(3)若没有找到返回false
也可以从左下角开始找(row = M-1,col = 0),相等返回true;比K小则col += 1;比K大则row -= 1;依次重复该步骤,没有返回false。
【C++code】
#define N 4
//从右上角开始
bool isContains(int arr[][N],int column,int K){
int row = 0;
int col = column - 1;