該題目有兩個重要條件!該數組從左到右以及從上到下均爲遞增,這樣咱們能夠在右上或者左下下手,爲何不是左上或者右下呢,由於這兩個點是極限點,看下面的圖差很少應該好懂一些吧!下圖是以右上爲開始點乾的。。數組
也就是說,咱們要查找的這個數,從右上開始一個個的去嘗試。函數
若是這個數等於右上角的數,則返回正確。spa
若是這個數大於右上角的數,那麼直接刪除這一行,由於這一行中,最大的就是右面的那個了,因此呢,接下來,只須要考慮處了這一行之外的數了。code
若是這個數小於右上角的數,那麼直接刪除這一列,道理同上!blog
若是不是第一種狀況,刪除一行或者一列後,那麼接下來呢,再次選擇右上角的點,繼續執行上述工做。排序
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; } }