劍指offer-二維數組中的查找(leetcode)

這道題的解法核心就是:從右上角不斷搜索。

若 matrix[row][col] == target  則return true;

若 matrix[row][col] > target,則向該數字的左方繼續搜索,即col--;

若 matrix[row][col] < target,則向該數字的下方繼續搜索,即row++;

這樣子做的原因是數組的每行每列都是有序的,這樣子可以很容易的縮小查找範圍。當然也可以使用二分法繼續加快速的。

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {       
        
        if(matrix.empty() || matrix.size() == 0  || matrix[0].size() == 0){
            return false;
        }
        
        int n = matrix.size();
        int m = matrix[0].size();

        int row = 0;
        int col = m-1;
        while(row < n && col >= 0){
            if(matrix[row][col] == target){
                return true;
            }else if(matrix[row][col] > target){
                col--;
            }else{
                row++;
            }
        }
        return false;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章