题目:二维数组中的查找

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

示例:

现有矩阵 matrix 如下:

[[1,   4,  7, 11, 15],[2,   5,  8, 12, 19],[3,   6,  9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]
]

给定 target = 5,返回 true,给定 target = 20,返回 false

限制:

0 <= n <= 10000 <= m <= 1000

解题思路:

首先选取二维数组当中右上角的数字。

  • 如果该数字等于target,则查找过程结束;
  • 如果该数字大于target,则剔除这个数字的所在列(由于该列是递增顺序,这个数字是这一列里的最小的数字,这一列的数字都会比target大);
  • 如果该数字小于target,则剔除这个数字的所在行(同理,这个数字是这一行里最大的数字,所以这一行的数字都要比target小);
  • 再次选取剩余区域的右上角的数字,然后重复上述的过程。

时间复杂度O(m+n)(其中 m 和 n 分别代表行数和列数),空间复杂度O(1)

class Solution {
public:bool findNumberIn2DArray(vector<vector<auto>>& matrix, auto target) {auto rows = matrix.size();auto columns = matrix[0].size();if(rows>0 && columns>0){    auto row = 0 ;auto column = columns-1;while(row<rows&&column>=0){if(matrix[row][column]==target) {return true;}else if(matrix[row][column]>target) {column--;}else row++;}}return false;}
};

LeetCode代码提交报错:

reference binding to null pointer of type 'struct value_type'

后来找到问题是,测试用例如果直接给出一个空字符串的话,也就是说函数传进的是一个空的vector容器,那么在调用matrix[0]的时候就会下标越界,因为matrix[0]是不存在的。加上如下判断条件之后,顺利通过。

if(matrix.empty())  //不加这个传入为空的判断的话会访问越界return false;
class Solution {
public:bool findNumberIn2DArray(vector<vector<auto>>& matrix, auto target) {if(matrix.empty())  //不加这个传入为空的判断的话会访问越界return false;auto rows = matrix.size();auto columns = matrix[0].size();if(rows>0 && columns>0){    auto row = 0 ;auto column = columns-1;while(row<rows&&column>=0){if(matrix[row][column]==target) {return true;}else if(matrix[row][column]>target) {column--;}else row++;}}return false;}
};

剑指offer:面试题04. 二维数组中的查找相关推荐

  1. 剑指offer面试题04. 二维数组中的查找(Array)

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

  2. 剑指offer刷题 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...

  3. 剑指Offer - 面试题4. 二维数组中的查找(双指针)

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

  4. 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

    文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...

  5. 剑指offer 面试题3—二维数组中找数

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...

  6. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

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

  7. 牛客网-剑指offer 第一题(二维数组中的查找)

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

  8. JAVA剑指offer编程练习:二维数组中的查找(数组)

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

  9. 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找

    题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...

最新文章

  1. Go 学习笔记(17)— 函数(03)[defer 定义、defer 特点、defer 释放资源]
  2. Decode()函数使用技巧
  3. 亿级商品详情页架构演进技术解密 | 高可用架构系列 二
  4. 网络公司千千万,放心委托看这里!
  5. 让服务器接近最终用户能解决性能问题吗?——微云网络
  6. EasyMock 使用方法与原理剖析
  7. sklearn特征的提取(上)
  8. 附件中可能包含对计算机有害的病毒.附件可能无法正确显示,广西成人高校计算机实用基础统考理论试题(A卷)...
  9. QT连接多种数据库f方法及测试
  10. LeetCode 2129. 将标题首字母大写
  11. 华为美国研发中心将迁至加拿大;高通CEO否认中国5G超美国:技术上还没有,顶多算并驾齐驱;亚马逊宣布进军量子界……...
  12. Learning opencv续不足(七)线图像的设计D
  13. .net reflector 反编译失败 索引超出了数组界限问题处理方法
  14. 聊城初中计算机考试成绩查询,聊城市初中学业水平考试成绩查询系统入口2021...
  15. 一个词语解释了我万千的苦闷
  16. mysql语句高逼格_求一些逼格高的语句?
  17. IDOC的处理函数IDOC_INPUT_ORDERS的增强点的分析
  18. jQuery slideUp(),slideDown()和slideToggle()示例
  19. 在线Spirte图定位工具,自动生成CSS
  20. 北京龙庆峡自助游及攻略

热门文章

  1. Java 过一下基础
  2. 从零开始学习springboot之springboot搭建
  3. Java 设计模式_代理模式(2016-08-19)
  4. [51单片机学习笔记ONE]-----LED灯的多种使用方法
  5. C++ stl vector介绍
  6. shell--数组的定义/访问/赋值/遍历
  7. xdoj 1144 K叉哈弗曼树
  8. (一次性搞定)ORB_SLAM2地图保存与加载
  9. 固定表头和首行_Excel一步制作斜线表头!还有这些高分Excel表头技巧,看完秒会...
  10. 慕课的原型图快速变html,分享一个html转换为pdf 利器 Pechkin