1. 程式人生 > >劍指offer-Java實現:題目1、二維陣列中的查詢

劍指offer-Java實現:題目1、二維陣列中的查詢

 

題目描述

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

 

思路:由於題目說從左到右,從上到下都是遞增的。我一開始就想到用 對角線上的元素來和 目標元素比較。但是選的是右下角。

有欠考慮了,因為右下角排除的元素是一個角落的範圍。如果選擇右上角的元素。只AC了58%左右就出錯了。。沒搞懂原因。

由於,它是每一列的最小值。一旦大於目標,那麼可以排除一列。這樣操作就很清晰了。

 

程式碼:

public class Solution {
    public boolean Find(int target, int [][] array) {
        int m = array.length - 1; //列
        int i = 0; //行
        while(m >= 0 && i < array[0].length){
            if(array[m][i] > target)
                m--;     //大於右上角,直接排除一列
            else if(array[m][i] < target)
                i++;
            else
                return true;
        }       
        return false;
    }
}