面试题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:二维数组中的查找相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 【剑指offer-Java版】03二维数组中的查找

    给定二维数组,和一个整数,二维数组的行从左到右递增,列从上到下递增. 查找该二维数组,看是否有和给定整数相等的值 技巧就是找到一个位于[i][j]的值,通过该值判断给定值可能存在于数组的哪一独立部分 ...

  10. 剑指offer:面试题04. 二维数组中的查找

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

最新文章

  1. 从BloomFilter到Counter BloomFilter
  2. 【干货】105页周志华教授《机器学习手推公式》开源PDF
  3. python将字符串中的数字相加求和的实现
  4. Customization larbin
  5. bash特性以及shell脚本简介
  6. Struts的几个精细之处
  7. 你能分清多进程与多线程吗?
  8. 452. 用最少数量的箭引爆气球(贪心算法+思路+详解)07
  9. 聊聊身边的嵌入式,为什么老司机都爱后视镜
  10. java 情侣最佳升高_2016年最佳情侣:显示经理和窗口经理
  11. python项目计划_2017年vn.py项目计划
  12. 学习 shell —— 条件判断 if 的参数
  13. 计算机硬盘不识别u盘启动,快启动U盘启动pe系统无法识别硬盘怎么办?
  14. Rust : CSV库的用法
  15. [WP8.1UI控件编程]Windows Phone XAML页面的编译
  16. 一套C#图书管理系统源码 书籍借还登记统计系统源码
  17. 爱加密加固病毒分析-破解篇
  18. 批处理中的删除命令:del
  19. 【HDU5442 2015长春网络赛F】字符串最小表示法+函数逆用循环节法+翻转串字符串哈希法
  20. 面向对象--多态,接口

热门文章

  1. 【IoT】开放 IoT 平台:电信 NB-IoT 物联网开放平台与移动 oneNET 平台对比分析
  2. 接口作为数据类型的应用
  3. 爱码哥移动开发平台|让制作app更加便捷
  4. Visio用UML2.2模板包
  5. 2021年第16届首尔国际电视节圆满落幕
  6. 【保研夏令营经验贴】2021武汉大学国家网络安全学院+华中科技大学网络空间安全学院+华中科技大学武汉光电国家研究中心
  7. 大公司为什么都有API网关?聊聊API网关的作用
  8. bzoj2215[POI2011]Conspiracy
  9. PMP,IPMP,CPMP的区别
  10. 网上购车平台易车买车好吗!