劍指offer-二維數組查找題解-本質與實現

概述

從左下開始找。

本質是利用:有序序列中最小的元素比target(目標元素)大,那麼target必然不在此序列中。因此也可以從右上找。

題目描述

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

原理

從左下開始找。左下的那個元素m有如下性質:

  1. 這一行中最小的。(如果target比m小,那麼這一行就不必找了,往上一行找)
  2. 這一列中最大的。(如果target比m大,那麼往右走)

實現

public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length;
        int col = array[0].length;
        if (row == 0 || col == 0) return false;
        
        int r = row - 1;
        int c = 0;
        while (true) {
            if (array[r][c] < target) {
                c++;
                if (c == col) return false;
            } else if (array[r][c] > target) {
                r--;
                if (r < 0) return false;
            } else {
                return true;
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章