240.搜索二维矩阵II

从左下角位置开始搜索
时间复杂度:O(行数+列数)。
想法有点像二分法,大了往一个方向找,小了往另一个方向找。由于矩阵横向和纵向都是递增,如果从(0,0)位置开始找,往右和往下都是增大,因此不知道实际上要往哪个方向找。但是如果以左下角位置为搜索起点,则向右是递增,向上是递减,就可以用类似二分法的方式来解决这个问题。
我们知道从矩阵的一个位置到达另一个位置都可以用若干次横向移动和若干次纵向移动,因此我们只要保证在搜索的过程中横移和纵移一个是增大一个是减小即可,因此从左下角和右上角开始搜索都可以,而从左上角和右下角开始搜索则不行。
public boolean searchMatrix(int[][] matrix, int target) {
int m=matrix.length,n=matrix[0].length;
int i=m-1,j=0;
while(i>=0&&j<n){
if(matrix[i][j]==target) return true;
else if(matrix[i][j]<target) j++;
else i--;
}
return false;
}
两个方向二分
这种解法在矩阵行数和列数相差很大的时候比较有效。
private boolean searchRow(int[][] matrix,int i,int target){
int l=0,r=matrix[0].length-1,mid;
while(l<=r){
mid=(l+r)/2;
if(matrix[i][mid]==target) return true;
else if(matrix[i][mid]<target) l=mid+1;
else r=mid-1;
}
return false;
}
private boolean searchColumn(int[][] matrix,int i,int target){
int l=0,r=matrix.length-1,mid;
while(l<=r){
mid=(l+r)/2;
if(matrix[mid][i]==target) return true;
else if(matrix[mid][i]<target) l=mid+1;
else r=mid-1;
}
return false;
}
public boolean searchMatrix(int[][] matrix, int target) {
//如果行数小于列数,则二分搜索的次数等于行数;反之等于列数
for(int i=0;i<matrix.length&&i<matrix[0].length;++i){
if(searchRow(matrix,i,target)||searchColumn(matrix,i,target)) return true;
}
return false;
}
240.搜索二维矩阵II的更多相关文章
- Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)
Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...
- LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II) 37
240. 搜索二维矩阵 II 240. Search a 2D Matrix II 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性 ...
- Java实现 LeetCode 240 搜索二维矩阵 II(二)
240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. ...
- Leetcode 240.搜索二维矩阵II
搜索二维矩阵II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有 ...
- 240. 搜索二维矩阵 II
二维数组搜索 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...
- 【LeetCode】 240. 搜索二维矩阵 II
题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 mat ...
- LeetCode 240——搜索二维矩阵 II
1. 题目 2. 解答 2.1. 方法一 从矩阵的左下角开始比较 目标值等于当前元素,返回 true: 目标值大于当前元素,j 增 1,向右查找,排除掉此列上边的数据(都比当前元素更小): 目标值小于 ...
- LeetCode 240 - 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列.每列的元素从上到下升序排列.示例: 现有矩阵 matrix 如 ...
- LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II)
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 m ...
随机推荐
- Mybatis(四)——
test https://www.cnblogs.com/chiaki/p/14529418.html
- Python网编之简单的聊天小程序
服务端: import socket sock = socket.socket() sock.bind(("127.0.0.1",8899)) sock.listen(5) whi ...
- Docker(36)- docker run 的流程和原理
背景 目前项目组上, Docker 用的非常重,所有微服务都是通过 docker 来部署的 所以不能仅仅会命令,还得会一些原理的东西,特此补一篇基础点的,后面再更加深入一些 docker 原理 本篇学 ...
- GIT:修改上一次提交的注释信息(git commit --amend)
git commit -m 注释信息 如果这时候注释信息输入错误,就可以输入以下指令更改 git commit --amend 键入" i "进入编辑模式 修改后键入ESC,:wq ...
- Mybatis log plugin插件破解修复版 MyBatis Log Plugin License Authorization Failed
github地址 - https://github.com/Link-Kou/intellij-mybaitslog
- golang 注释 exported function xxx should have comment or be unexported
0x00 问题 exported function xxx should have comment or be unexported. 0x01 解决 https://golang.org/s/sty ...
- java.net.NoRouteToHostException: Cannot assign requested address
今天压力测试时, 刚开始出现了很多异常, 都是 java.net.NoRouteToHostException: Cannot assign requested address. 经网上查资料, 是 ...
- go语言游戏服务端开发(三)——服务机制
五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例. P2P网络为服务进程间.服务进程与客户端间通信提供了便利,在这个基础上可以搭建服务. 在服务层,通信包可以通过定义协议号来确定该包怎 ...
- Java数学函数的使用
Java的Math类中提供了一系列关于数学运算的静态方法,常见的运算整理如下[1] 算数运算 Math.sqrt() // 平方根 Math.cbrt() // 立方根 Math.pow(a, b) ...
- VS 2019下载、安装与注册包含MF、界面美化和安装Visual Assist
下载: 1.在搜索框中输入"微软" 2. 3. 安装: 1.双击运行-继续-等待安装完成 2. 3.安装完后,重启电脑,并创建快捷方式. 注册: 1.打开软件 2. 3. 4.网上 ...