鱼C论坛

 找回密码
 立即注册
查看: 1550|回复: 0

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

[复制链接]
发表于 2020-3-28 17:21:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  2. &#160;

  3. 示例:

  4. 现有矩阵 matrix 如下:

  5. [
  6.   [1,   4,  7, 11, 15],
  7.   [2,   5,  8, 12, 19],
  8.   [3,   6,  9, 16, 22],
  9.   [10, 13, 14, 17, 24],
  10.   [18, 21, 23, 26, 30]
  11. ]
  12. 给定 target&#160;=&#160;5,返回&#160;true。

  13. 给定&#160;target&#160;=&#160;20,返回&#160;false。

  14. &#160;

  15. 限制:

  16. 0 <= n <= 1000

  17. 0 <= m <= 1000

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


  1. #include <vector>
  2. #include <iostream>

  3. using namespace std;

  4. bool solution(vector<vector<int> >& input, int target){
  5.         if(input.size() == 0 || input[0].size() == 0) return false;
  6.         //start point
  7.         int a = input.size() - 1;
  8.         int b = 0;
  9.         while(a >= 0 && b <= input[0].size()-1){
  10.         if(input[a][b] == target) return true;
  11.                 if(input[a][b] > target){
  12.                          a--;
  13.                         continue;}
  14.                 if(input[a][b] < target) {
  15.                         b++;
  16.                         continue;}
  17.         }
  18.         return false;       
  19. }       
  20. int main(void){
  21.         vector<vector<int> > input;
  22.         int n, m;
  23.         cout << "please send a number for row" << endl;
  24.         cin >> n;
  25.         input.resize(n);
  26.         cin.clear();
  27.         cout << "please send a number for column" << endl;
  28.         cin >> m;
  29.         cin.clear();
  30.         cout << "please send number for matrix(n*m)" << endl;
  31.         int number;
  32.         for(int i = 0; i < n; i++){
  33.                 for(int j = 0; j < m; j++){
  34.                         cin >> number;
  35.                         input[i].push_back(number);
  36.                 }
  37.         }
  38.         for(int i = 0; i < n; i++){
  39.                 for(int j = 0; j < m; j++){
  40.                         cout << input[i][j] << " ";
  41.                 }
  42.                 cout << endl;
  43.         }
  44.         cout << endl;
  45.         cin.clear();
  46.         int target;
  47.         cin >> target;
  48.         bool result = solution(input, target);
  49.         cout << result << endl;
  50.         return 0;
  51. }
复制代码


参考链接:https://www.bilibili.com/video/B ... 6509475985055900873
https://bbs.csdn.net/topics/392144947

注意事项:
1.边界的确定
2.while()里的条件如果把符号全部换成!=则存在遗漏情况的问题。
3.从矩阵的右上角或左下角开始作为初始点。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表