[刷題]1.二維數組查找

題目

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

解題思路

這題乍一看還是聽費勁的,而且根本沒給測試用例,這可咋驗證對錯?既然題里沒給,那就自己寫個簡單的測試用例吧:
我是這么做的,創建一個5x5的二維數組,并且按照題目要求簡單的添加上數字。我是輸出5x5個0,然后先按行賦值,然后再給每列重新賦值。輸出是這個樣:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

然后就可以思考這題了。我們觀察上面的輸出:
左下角和右上角是個好地方,都可以作為開始。拿左下角來說:如果target小于左下角的5,則向上移動,如果大于左下角的5,則向右移動。這樣循環下去,走完了還沒找到那應該是真找不到了。。。
具體的解法寫在了代碼中:

完整代碼

/**
 * Created by AceCream on 2017/3/22.
 * 在一個二維數組中,每一行都按照從左到右遞增的順序排序,
 * 每一列都按照從上到下遞增的順序排序。請完成一個函數,
 * 輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
 */
public class Test{

    public boolean Find(int target, int [][] array) {
        //顯示二維數組:
//        for (int i=0;i<array.length;i++){
//            for (int j=0;j<array.length;j++){
//                System.out.print(array[i][j]+" ");
//            }
//            System.out.println();
//        }
        int len = array.length-1;
        int wid = 0;
        while (len>=0 && wid<array[0].length){

            if (array[len][wid]>target){
                len--;
            }else if (array[len][wid]<target){
                wid++;
            }else {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        int temp = 99;
        int[][] a = new int[5][5];
        for (int i=0;i<a.length;i++){
            for (int j=0;j<a.length;j++){
                a[i][j]=j+1;
            }
            for (int k=0;k<a[0].length;k++){
                a[i][k] = i+k+1;
            }

        }
        Test test = new Test();
        System.out.println(test.Find(temp,a));
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容