leetcode|剑指offter|面试题4:二维数组中的查找
面试题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
。
解法1:暴力破法
class Solution {public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.empty()){return false;}int rows=matrix.size();int columns=matrix[0].size();for(int i=0;i<rows;i++){for(int j=0;j<columns;j++){if(matrix[i][j]==target)return true ;}}return false;}
};
解法2:从给定矩阵的右上角开始查找
首先选取数组中右上角的数字,如果该数字等于要查找的数字,则结束查找过程;如果该数字大于要查找的数字,则提出该数字所在的列;如果该数字小于要查找的数字,则提出该数字所在的行。不断剔除一行或者一列,缩小查找范围,直到找到要查找的数字。
class Solution {public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.empty()){return false;}int rows=matrix.size();int columns=matrix[0].size();int row=0,column=columns-1;//从右上角开始判断while(row<rows&&column>=0){if(matrix[row][column]>target)column--;else if(matrix[row][column]<target)row++;else return true;}return false;}
};
解法3:还可以从给定矩阵的左下角开始查找
class Solution {public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.empty()) //异常判断{return false;}int rows=matrix.size();int columns=matrix[0].size();int row=rows-1,column=0;//从左下角开始判断while(row>=0&&column<columns){if(matrix[row][column]>target)row--;//要查找的数字比该数字小,则剔除该行,上移else if(matrix[row][column]<target)column++;要查找的数字比该数字大,则剔除该列,右移else return true;//相等则返回true}return false;}
};
leetcode|剑指offter|面试题4:二维数组中的查找相关推荐
- 剑指Offer - 面试题4. 二维数组中的查找(双指针)
1. 题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例 ...
- 剑指offer面试题04. 二维数组中的查找(Array)
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 ...
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...
- 剑指offer刷题 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...
- 剑指offer 面试题3—二维数组中找数
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...
- 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 牛客网-剑指offer 第一题(二维数组中的查找)
//题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. /*第一种 将每一行 ...
- JAVA剑指offer编程练习:二维数组中的查找(数组)
1.题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 【剑指offer-Java版】03二维数组中的查找
给定二维数组,和一个整数,二维数组的行从左到右递增,列从上到下递增. 查找该二维数组,看是否有和给定整数相等的值 技巧就是找到一个位于[i][j]的值,通过该值判断给定值可能存在于数组的哪一独立部分 ...
- 剑指offer:面试题04. 二维数组中的查找
题目:二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
最新文章
- 从BloomFilter到Counter BloomFilter
- 【干货】105页周志华教授《机器学习手推公式》开源PDF
- python将字符串中的数字相加求和的实现
- Customization larbin
- bash特性以及shell脚本简介
- Struts的几个精细之处
- 你能分清多进程与多线程吗?
- 452. 用最少数量的箭引爆气球(贪心算法+思路+详解)07
- 聊聊身边的嵌入式,为什么老司机都爱后视镜
- java 情侣最佳升高_2016年最佳情侣:显示经理和窗口经理
- python项目计划_2017年vn.py项目计划
- 学习 shell —— 条件判断 if 的参数
- 计算机硬盘不识别u盘启动,快启动U盘启动pe系统无法识别硬盘怎么办?
- Rust : CSV库的用法
- [WP8.1UI控件编程]Windows Phone XAML页面的编译
- 一套C#图书管理系统源码 书籍借还登记统计系统源码
- 爱加密加固病毒分析-破解篇
- 批处理中的删除命令:del
- 【HDU5442 2015长春网络赛F】字符串最小表示法+函数逆用循环节法+翻转串字符串哈希法
- 面向对象--多态,接口
热门文章
- 【IoT】开放 IoT 平台:电信 NB-IoT 物联网开放平台与移动 oneNET 平台对比分析
- 接口作为数据类型的应用
- 爱码哥移动开发平台|让制作app更加便捷
- Visio用UML2.2模板包
- 2021年第16届首尔国际电视节圆满落幕
- 【保研夏令营经验贴】2021武汉大学国家网络安全学院+华中科技大学网络空间安全学院+华中科技大学武汉光电国家研究中心
- 大公司为什么都有API网关?聊聊API网关的作用
- bzoj2215[POI2011]Conspiracy
- PMP,IPMP,CPMP的区别
- 网上购车平台易车买车好吗!