原题链接Search a 2D Matrix

判断一个二维数组中是否存在某个值

该数组满足

  • 每一行元素按从左到右递增顺序排列
  • 当前行的第一个元素大于上一行的最后一个元素

假设二维数组的维度是m × n

考虑二维数组中第0行最后一列的元素matrix[i][j],即i = 0, j = n - 1

如果matrix[i][j] == target,那么直接返回就可以。

现在考虑不相等的情况,根据数组的排列情况可知

由matrix[i][j]的位置可知,在第i行,没有比matrix[i][j]大的值;在第j列,没有比matrix[i][j]小的值,即

matrix[i][j - 1] < matrix[i][j]并且matrix[i + 1][j] > matrix[i][j]

也就是说第一个比matrix[i][j]大的元素是matrix[i + 1][j],而第一个比matrix[i][j]小的元素是matrix[i][j - 1]

假设matrix[i][j] > target,那么应该找第一个比matrix[i][j]大的元素,所以跳到下一行寻找,即另i = i + 1。一旦另i = i + 1,就好比承认从第i行的第j列,第i行的第j-1列,…,第i行的第0列元素都比target小,那么就没必要在第i行上浪费时间,直接跳到下一行,把[i + 1, j]看做是二维数组第0行最后一列的位置。也就是说,现在二维数组的维度是(m - i - 1) × n,第0行最后一列的元素是matrix[i + 1][j]

假设matrix[i][j] < target,那么应该找第一个比matrix[i][j]小的元素,由上面的结论可知在j-1列,所以另j = j - 1。一旦另j = j - 1,就好比承认第i行的第j列,第i+1行的第j列,…,第m行的第j列元素都比target大,那么就可以把第j列抛弃掉,把[i, j - 1]看做是二维数组第0行最后一列的位置。也就是说,现在二维数组的维度是m × j,第0行最后一列的元素是matrix[i][j - 1]

这样,以新的起始点开始执行查找操作,程序唯一需要做的事情就是判断matrix[i][j]和target的大小,matrix[i][j]大,则j = j - 1;matrix[i][j]小,则i = i + 1

代码如下

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.empty() || matrix[0].empty())return false;int m = matrix.size();int n = matrix[0].size();int i = 0, j = n - 1;while(i < m && j >= 0){if(matrix[i][j] == target)return true;/* 向左移动 */else if(matrix[i][j] > target)--j;/* 向下移动 */else++i;}return false;}
};

原题链接Search a 2D Matrix II

二维数组中元素的排列规则为

  • 每一行的元素从左到右按递增顺序排列
  • 每一列的元素从上到下按递增顺序排列

解决方法和上面一模一样

代码如下

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.empty() || matrix[0].empty())return false;int m = matrix.size();int n = matrix[0].size();int i = 0, j = n - 1;while(i < m && j >= 0){if(matrix[i][j] == target)return true;/* 向左移动 */else if(matrix[i][j] > target)--j;/* 向下移动 */else++i;}return false;}
};

每天一道LeetCode-----在有序的二维数组中查找某个元素相关推荐

  1. 剑指offer之二维数组中查找

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

  2. 数据结构与算法--数组:二维数组中查找

    数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...

  3. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递

    /*编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递*/ #include<stdio.h> #define N 4 #define M 3 int findmax(int ( ...

  4. 二维数组中查找指定数据

    二维数组中查找指定数据 数组中元素每行按照从左到右递增,每列从上到下递增 bool Find(int* arr, int rows, int columns, int data) {bool foun ...

  5. 找出二维数组中的最小元素

    描述 找出m×n的二维数组中的最小元素,把该元素所在行的各个元素(假设只有一个最小元素)与二维数组的末行元素互换. 输入 第一行包含2个正整数m和n,分别表示二维数组的行数和列数,其中m和n均不超过3 ...

  6. 在二维数组中查找一个数

    在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列也按照从上到下递增的顺序排列.在这样一个序列中查找一个数 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 例如查找 ...

  7. php查询二维数组中的值,如何在二维数组中查找一个指定的数值

    最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排 ...

  8. 在二维数组中查找一个数字

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

  9. php 二维数组中查找,二维数组中的查找

    一.给出的是方阵 [[1,6,7,8], [3,7,8,9], [9,10,11,12], [12,13,14,15]] 这种情况非常简单,可知对角线元素应为查找元素,如果target大于对角线上某个 ...

最新文章

  1. 基于WINCE6.0+S3C2443的camera驱动
  2. 机器学习-分类算法-决策树,随机森林10
  3. Android之通过用户名和密码连接指定wifi热点(兼容Android9.0和Android10.0和addNetwork(wifiNewConfiguration)返回-1问题)
  4. React 源码剖析系列 - 解密 setState
  5. matlab2c使用c++实现matlab函数系列教程-circshift函数
  6. DXperience-6.2.4 破解
  7. 初级计算机处理员试题及答案,计算机软考信息技术处理员模拟试题及答案(1)[5]...
  8. c语言同构数循环,C语言求同构数.pdf
  9. 呼叫中心行业,引领时代进步
  10. linux 配置 NTP 服务器
  11. 软件测试计划与测试方案
  12. 【TcaplusDB知识库】快速上手TDR表的增删查改操作
  13. 华硕主板H81M-E BIOS刷NVMe支持M.2固态硬盘成功
  14. Unity检测IOS刘海屏
  15. 无人驾驶路径规划(三)局部路径规划-Frenet坐标系下的动态轨迹规划
  16. html视频怎么转换成图片,WPS演示如何将图片转换成视频?
  17. 安徽理工计算机学院朱君,井下带式输送机集中监视与控制系统[1]
  18. mysql学习-Innodb行格式compact行记录解析
  19. 百度云盘云知梦php_[云知梦]WEB前端开发_WEB前端新手入门视频教程[百度云盘]
  20. 基于帝国竞争算法的函数寻优算法

热门文章

  1. logback日志模板与详解
  2. MySQL索引与Index Condition Pushdown(二)
  3. Windows 7 VHD 启动
  4. OXite解读(1)----- 概述
  5. ss.exe 命令参数应用
  6. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)
  7. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - B. 生日蜡烛
  8. 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习代理
  9. 2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数
  10. 核心概念——节点/边/Combo——内置节点——Ellipse