糖逗 发表于 2020-3-28 17:21:39

C++刷剑指offer(面试题04. 二维数组中的查找)【vector<vector<int>>】

本帖最后由 糖逗 于 2020-4-5 10:40 编辑

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

 

示例:

现有矩阵 matrix 如下:

[
,
,
,
,

]
给定 target = 5,返回 true。

给定 target = 20,返回 false。

 

限制:

0 <= n <= 1000

0 <= m <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


#include <vector>
#include <iostream>

using namespace std;

bool solution(vector<vector<int> >& input, int target){
        if(input.size() == 0 || input.size() == 0) return false;
        //start point
        int a = input.size() - 1;
        int b = 0;
        while(a >= 0 && b <= input.size()-1){
      if(input == target) return true;
                if(input > target){
                       a--;
                        continue;}
                if(input < target) {
                        b++;
                        continue;}
        }
        return false;       
}       
int main(void){
        vector<vector<int> > input;
        int n, m;
        cout << "please send a number for row" << endl;
        cin >> n;
        input.resize(n);
        cin.clear();
        cout << "please send a number for column" << endl;
        cin >> m;
        cin.clear();
        cout << "please send number for matrix(n*m)" << endl;
        int number;
        for(int i = 0; i < n; i++){
                for(int j = 0; j < m; j++){
                        cin >> number;
                        input.push_back(number);
                }
        }
        for(int i = 0; i < n; i++){
                for(int j = 0; j < m; j++){
                        cout << input << " ";
                }
                cout << endl;
        }
        cout << endl;
        cin.clear();
        int target;
        cin >> target;
        bool result = solution(input, target);
        cout << result << endl;
        return 0;
}

参考链接:https://www.bilibili.com/video/BV1H7411j75L?from=search&seid=16509475985055900873
https://bbs.csdn.net/topics/392144947

注意事项:
1.边界的确定
2.while()里的条件如果把符号全部换成!=则存在遗漏情况的问题。
3.从矩阵的右上角或左下角开始作为初始点。
页: [1]
查看完整版本: C++刷剑指offer(面试题04. 二维数组中的查找)【vector<vector<int>>】