一、题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

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

2、举例
如果在一个二维数组中找到数字7,则返回true,如果没有找到,则返回false。

剑指offer(一):二维数组中的查找--数组1

查找过程如下:

剑指offer(一):二维数组中的查找--数组1

3、编程实现
C++11(clang++ 3.9):

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

Python2.7.3:

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        rows = len(array)
        cols = len(array[0])
        if rows > 0 and cols > 0:
            row = 0
            col = cols - 1
            while row < rows and col >= 0:
                if target == array[row][col]:
                    return True
                elif target < array[row][col]:
                    col -= 1
                else:
                    row += 1
        return False

4.思路二
矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
因此从左下角开始查找,当要查找数字比左下角数字大时,右移
要查找数字比左下角数字小时,上移
5.编程实现

class Solution {
public:
    bool Find(vector<vector<int> > array,int target) {
        int rowCount = array.size();
        int colCount = array[0].size();
        int i,j;
        for( i=rowCount-1, j=0; i>=0 && j<colCount; )
        {
            if(target == array[i][j])
                return true;
            if(target < array[i][j])
            {
                i--;
                continue;
            }
            if(target > array[i][j])
            {
                j++;
                continue;
            }
        }
        return false;
    }
};

相关文章:

  • 2022-12-23
  • 2021-10-09
  • 2021-05-09
  • 2021-06-13
  • 2022-12-23
  • 2022-01-11
  • 2021-06-06
猜你喜欢
  • 2021-12-06
  • 2021-08-16
  • 2022-03-02
  • 2022-01-13
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
相关资源
相似解决方案