劍指Offer的學習筆記(C#篇)-- 二維數組中的查找

題目描述

在一個二維數組中(每一個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

一 . 解題思路

        該題目有兩個重要條件!該數組從左到右以及從上到下均爲遞增,這樣咱們能夠在右上或者左下下手,爲何不是左上或者右下呢,由於這兩個點是極限點,看下面的圖差很少應該好懂一些吧!下圖是以右上爲開始點乾的。。數組

        也就是說,咱們要查找的這個數,從右上開始一個個的去嘗試。函數

         若是這個數等於右上角的數,則返回正確。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;
    }
}
相關文章
相關標籤/搜索