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


題目描述

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

一 . 解題思路

        該題目有兩個重要條件!該數組從左到右以及從上到下均為遞增,這樣我們可以在右上或者左下下手,為什么不是左上或者右下呢,因為這兩個點是極限點,看下面的圖差不多應該好懂一些吧!下圖是以右上為開始點干的。。

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

         如果這個數等於右上角的數,則返回正確。

         如果這個數大於右上角的數,那么直接刪除這一行,因為這一行中,最大的就是右面的那個了,所以呢,接下來,只需要考慮處了這一行以外的數了。

         如果這個數小於右上角的數,那么直接刪除這一列,道理同上!

         如果不是第一種情況,刪除一行或者一列后,那么接下來呢,再次選擇右上角的點,繼續執行上述工作。

二 . 代碼實現

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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM