今日刷题笔记记录

34 阅读1分钟

当青训营遇上码上掘金

二维数组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;

}