剑指offer:面试题04. 二维数组中的查找
题目:二维数组中的查找
在一个 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. 二维数组中的查找相关推荐
- 剑指offer面试题04. 二维数组中的查找(Array)
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 ...
- 剑指offer刷题 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...
- 剑指Offer - 面试题4. 二维数组中的查找(双指针)
1. 题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例 ...
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...
- 剑指offer 面试题3—二维数组中找数
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...
- 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 牛客网-剑指offer 第一题(二维数组中的查找)
//题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. /*第一种 将每一行 ...
- JAVA剑指offer编程练习:二维数组中的查找(数组)
1.题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找
题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...
最新文章
- Go 学习笔记(17)— 函数(03)[defer 定义、defer 特点、defer 释放资源]
- Decode()函数使用技巧
- 亿级商品详情页架构演进技术解密 | 高可用架构系列 二
- 网络公司千千万,放心委托看这里!
- 让服务器接近最终用户能解决性能问题吗?——微云网络
- EasyMock 使用方法与原理剖析
- sklearn特征的提取(上)
- 附件中可能包含对计算机有害的病毒.附件可能无法正确显示,广西成人高校计算机实用基础统考理论试题(A卷)...
- QT连接多种数据库f方法及测试
- LeetCode 2129. 将标题首字母大写
- 华为美国研发中心将迁至加拿大;高通CEO否认中国5G超美国:技术上还没有,顶多算并驾齐驱;亚马逊宣布进军量子界……...
- Learning opencv续不足(七)线图像的设计D
- .net reflector 反编译失败 索引超出了数组界限问题处理方法
- 聊城初中计算机考试成绩查询,聊城市初中学业水平考试成绩查询系统入口2021...
- 一个词语解释了我万千的苦闷
- mysql语句高逼格_求一些逼格高的语句?
- IDOC的处理函数IDOC_INPUT_ORDERS的增强点的分析
- jQuery slideUp(),slideDown()和slideToggle()示例
- 在线Spirte图定位工具,自动生成CSS
- 北京龙庆峡自助游及攻略
热门文章
- Java 过一下基础
- 从零开始学习springboot之springboot搭建
- Java 设计模式_代理模式(2016-08-19)
- [51单片机学习笔记ONE]-----LED灯的多种使用方法
- C++ stl vector介绍
- shell--数组的定义/访问/赋值/遍历
- xdoj 1144 K叉哈弗曼树
- (一次性搞定)ORB_SLAM2地图保存与加载
- 固定表头和首行_Excel一步制作斜线表头!还有这些高分Excel表头技巧,看完秒会...
- 慕课的原型图快速变html,分享一个html转换为pdf 利器 Pechkin