剑指offer题目1:二维数组中的查找

题目描述

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

解答思路

首先是把符合这种题目思路的数组画在纸上。

image

这时候会发现两个规律:

  1. 每个数都会比左上方大,比右下方要小。
  2. 最左下角的数会比同一列的要大,也比同一行的数要小。

于是乎,我们可以把输入进来的整数和左下角的数x比较,如果比x小,那么我们可以和比x小的上1个数,如果比x大,可以和x右边的数比较,直到两个数相等。时间复杂度是O(m+n)。

实现代码

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int heigh = array.size();
        int length = array[0].size();
        
        int i = heigh-1;
        int j = 0;
        
        bool ret = false;
        while(i >= 0 && j < length) {
            if(array[i][j] > target) {
                i--;
            } else if(array[i][j] < target) {
                j++;
            } else {
                ret = true;
                break;
            }
        }
        return ret;
    }
};
posted @ 2019-03-27 10:07  {-)大傻逼  阅读(208)  评论(0)    收藏  举报
欢迎转载,转载请注明本文地址。