每天一道LeetCode-----在有序的二维数组中查找某个元素
原题链接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-----在有序的二维数组中查找某个元素相关推荐
- 剑指offer之二维数组中查找
1 问题 二维数组中查找: 在一个二维数组钟,每一行都按照从左到右递增得顺序排列,每一列 都按照从上往下得递增排列,请完成一个函数,输入这样得一个二维数组和一个 整数,判断数组是否含有该整数 列如: ...
- 数据结构与算法--数组:二维数组中查找
数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...
- C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递
/*编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递*/ #include<stdio.h> #define N 4 #define M 3 int findmax(int ( ...
- 二维数组中查找指定数据
二维数组中查找指定数据 数组中元素每行按照从左到右递增,每列从上到下递增 bool Find(int* arr, int rows, int columns, int data) {bool foun ...
- 找出二维数组中的最小元素
描述 找出m×n的二维数组中的最小元素,把该元素所在行的各个元素(假设只有一个最小元素)与二维数组的末行元素互换. 输入 第一行包含2个正整数m和n,分别表示二维数组的行数和列数,其中m和n均不超过3 ...
- 在二维数组中查找一个数
在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列也按照从上到下递增的顺序排列.在这样一个序列中查找一个数 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 例如查找 ...
- php查询二维数组中的值,如何在二维数组中查找一个指定的数值
最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排 ...
- 在二维数组中查找一个数字
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- php 二维数组中查找,二维数组中的查找
一.给出的是方阵 [[1,6,7,8], [3,7,8,9], [9,10,11,12], [12,13,14,15]] 这种情况非常简单,可知对角线元素应为查找元素,如果target大于对角线上某个 ...
最新文章
- 基于WINCE6.0+S3C2443的camera驱动
- 机器学习-分类算法-决策树,随机森林10
- Android之通过用户名和密码连接指定wifi热点(兼容Android9.0和Android10.0和addNetwork(wifiNewConfiguration)返回-1问题)
- React 源码剖析系列 - 解密 setState
- matlab2c使用c++实现matlab函数系列教程-circshift函数
- DXperience-6.2.4 破解
- 初级计算机处理员试题及答案,计算机软考信息技术处理员模拟试题及答案(1)[5]...
- c语言同构数循环,C语言求同构数.pdf
- 呼叫中心行业,引领时代进步
- linux 配置 NTP 服务器
- 软件测试计划与测试方案
- 【TcaplusDB知识库】快速上手TDR表的增删查改操作
- 华硕主板H81M-E BIOS刷NVMe支持M.2固态硬盘成功
- Unity检测IOS刘海屏
- 无人驾驶路径规划(三)局部路径规划-Frenet坐标系下的动态轨迹规划
- html视频怎么转换成图片,WPS演示如何将图片转换成视频?
- 安徽理工计算机学院朱君,井下带式输送机集中监视与控制系统[1]
- mysql学习-Innodb行格式compact行记录解析
- 百度云盘云知梦php_[云知梦]WEB前端开发_WEB前端新手入门视频教程[百度云盘]
- 基于帝国竞争算法的函数寻优算法
热门文章
- logback日志模板与详解
- MySQL索引与Index Condition Pushdown(二)
- Windows 7 VHD 启动
- OXite解读(1)----- 概述
- ss.exe 命令参数应用
- [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)
- 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - B. 生日蜡烛
- 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习代理
- 2020年第十一届蓝桥杯 - 省赛 - C/C++大学生A组 - C.蛇形填数
- 核心概念——节点/边/Combo——内置节点——Ellipse