【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵

知识点:数组,二分查找

题目描述

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

示例

link

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true 输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 输出:false

解法一:二分查找

这个二维数组是是有序的,想象一下,将其扁平化后就是一个有序的一维数组,就能使用二分查找了,所以可以想象一个一维数组,仍然和原来一样不断求中间值,只不过我们将中间值转化为二维数组的索引就可以了,

  • 行坐标=mid/列数。比如5/4=1,就在第1行;
  • 列坐标=mid%列数。比如5%4=1,就在第1列;
    这样就获得了其在二维数组中的值,nums[行坐标][列坐标];然后判断其与target的值,进行移动就可以了。

link

class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length, n = matrix[0].length; int left = 0, right = m*n-1; while(left <= right){ int mid = left + ((right-left) >> 1); int x = mid / n; int y = mid % n; if(matrix[x][y] == target){ return true; }else if(matrix[x][y] > target){ right = mid-1; }else{ left = mid+1; } } return false; } }
  • python
class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m, n = len(matrix), len(matrix[0]) i, j = 0, n-1 while 0 <= i < m and 0 <= j < n: if matrix[i][j] == target: return True elif matrix[i][j] < target: i += 1 else: j -= 1 return False

相关链接

搜索二维矩阵


__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15102004.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】74. 搜索二维矩阵』
点击右上角即可分享
微信分享提示