題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
一 . 解題思路
該題目有兩個重要條件!該數組從左到右以及從上到下均為遞增,這樣我們可以在右上或者左下下手,為什么不是左上或者右下呢,因為這兩個點是極限點,看下面的圖差不多應該好懂一些吧!下圖是以右上為開始點干的。。
也就是說,我們要查找的這個數,從右上開始一個個的去嘗試。
如果這個數等於右上角的數,則返回正確。
如果這個數大於右上角的數,那么直接刪除這一行,因為這一行中,最大的就是右面的那個了,所以呢,接下來,只需要考慮處了這一行以外的數了。
如果這個數小於右上角的數,那么直接刪除這一列,道理同上!
如果不是第一種情況,刪除一行或者一列后,那么接下來呢,再次選擇右上角的點,繼續執行上述工作。
二 . 代碼實現
class Solution { public bool Find(int target, int[][] array) { //把參考的數定義到右上角 int row=0; int col=array[0].Length-1; //循環操作過程 while(row<=array.Length-1&&col>=0) { //若相等,則返回正確 if(target==array[row][col]) { return true; } //若大於,則把row+1,即相當於刪除了那一行 else if(target>array[row][col]) { row++; } //否則,col-1,相當於刪除了最右面的列 else { col--; } } //如果執行結束了,還沒查到,那就是沒有!! return false; } }