LeetCode-74. 搜索二维矩阵
题目来源
题目详情
编写一个高效的算法来判断 m x n
矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出: true
示例 2:
输入: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出: false
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
题解分析
解法一:二分法
- 根据本题的题意,我们可以观察到,当前行的第一个值是始终小于上一行的最后一个元素,因此,我们可以将所有的行拼接起来形成一个有序的一维数组。
- 因为拼接后的数组是升序的,所以我们可以使用二分法来查找target值。只不过,我们在获取mid所在的元素时,需要根据mid值求出行号和列号。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n = matrix.length;
int m = matrix[0].length;
int low = 0, high = n * m -1;
while(low <= high){
int mid = low + (high - low) / 2;
int midval = matrix[mid / m][mid % m];
if(target == midval){
return true;
}else if(target < midval){
high = mid - 1;
}else{
low = mid + 1;
}
}
return false;
}
}
Either Excellent or Rusty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-03-06 197. 上升的温度 + datediff + 日期数据的比较
2021-03-06 415. 字符串相加 + 加法模拟
2021-03-06 196. 删除重复的电子邮箱 + delete