当青训营遇上码上掘金
二维数组A[m][n] 0≤i≤m,0≤j≤n满足A[i][j]≤A[i][j+1],A[i][j]≤A[i+1][j],x满足在A[m][n]中,在复杂度不高于O(m+n)找到符合x=A[i][j]的i和j
思路:
每一行,每一列都是从小到大排列。
我们以每次数组的第一行的最大值MAX为例讨论。
当其大于查找数N时,则MAX为首的列必然都大于N,该列可舍去得到新数组。
当其小于N时,则MAX所在的行可舍去,因为它是该行最大值。
这样,我们不断砍去当前数组的最后一列,或第一行,不断缩小数组范围,直到某次MAX=N找到,或者数组找完了没找到。
我的解决代码(c语言): #include<stdio.h>
bool find_elem(int matrix[][4],int row,int column,int key){
bool flag = false;
if(row > 0 && column > 0){
int i = 0;
int j = column - 1;
while(i < row && j >= 0){
if(matrix[i][j] == key){
flag = true;
printf("%d %d\n",i,j);
break;
}
else if(matrix[i][j] > key)
j = j-1;
else
i = i+1;
}
}
return flag;
}
int main(){
int a[4][4] = { {1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}
};
bool b;
b = find_elem(a,4,4,7);
printf("%d\n",b);
return 0;
}