給定一個二維數組,其每一行從左到右遞增排序,從上到下也是遞增排序。給定一個數,判斷這個數是否在該二維數組中。要求時間複雜度 O(M + N),空間複雜度 O(1)。其中 M 爲行數,N 爲 列數。數組
思路:當被查找數大於二維數組中a時,他可能出現的位置在這個a的右方或下方,但可能出現重疊會很是複雜。因此從角落開始查找。這樣能夠直接去掉行或列spa
代碼code
public boolean search(int [][]a,int m,int n,int key) { //m是行n是列 if(a==null||a.length==0||a[0].length==0) return false; int i=0; //行 int j=n-1; //列 while(i<=m-1&&j>=0) { if(a[i][j]==key) return true; else if(a[i][j]>key) { j--; }else { i++; } } return false; }
出現問題:邊界條件沒寫 if(a==null||a.length==0||a[0].length==0) return false;blog