劍指Offer-編程詳解-二維數組中的查找

  • 題目描述

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

  • 解析

特色:橫座標遞增有序,縱座標遞增有序
方法1:橫座標二分查找,縱座標二分查找;
方法2:假設矩陣從左下角增加,則有規律:矩陣左上角的元素,遞減向下,遞增向右。
則:從左上角元素比較,小於target則向下移動,大於target則向右移動;函數

  • 代碼:
public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length;// 行數
        int col = array[0].length;// 列數
        for (int i = row - 1, j = 0; i >= 0 && j <= col - 1;) {// i,j只初始化一次,拿取左上角元素
            if (array[i][j] == target) {
                return true;
            } else if (array[i][j] < target) {
                j++;
            } else {
                i--;
            }
        }
        return false;
    }
}
相關文章
相關標籤/搜索