二维数组中的查找

题目描述:

首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

解答:

首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

代码:

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        
        int row = array.size();
        int col = array[0].size();
        
        if (row == 0 || col == 0)
            return false;
        
        int i = 0;
        int j = col - 1;
        
        while( i < row && j >= 0){
            if(array[i][j] == target){
                return true;
            }
            else if(array[i][j] > target){
                j--;
            }
            else{
                i++;
            }
        }
        return false;
    }
};

 

posted @ 2019-04-18 22:54  kandid  阅读(176)  评论(0编辑  收藏  举报