240. 搜索二维矩阵 II(中)
题目
- 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
法一、暴力
var searchMatrix = function(matrix, target) {
let m=matrix.length,n=matrix[0].length
for(let i=0;i<m;i++){
for(let j=0;j<n;j++){
if (target==matrix[i][j]){
return true
}
}
}
return false
};
- 超出时间限制,时间复杂度:O(mn)。
法二、二分查找
- 每一行都是升序,对每一行进行二分查找
var searchMatrix = function(matrix, target) {
for(const row of matrix){
const index = search(row,target)
if (index >= 0){
return true
}
}
return false
};
const search = (nums,target)=>{
let low=0,high = nums.length -1
while(low<=high){
const mid = Math.floor((high-low)/2)+low
const num = nums[mid]
if(num === target){
return mid
}else if(num>target){
high=mid-1
}else{
low=mid+1
}
}
return -1
}
- 超出时间限制,时间复杂度:O(mlogn)。对一行使用二分查找的时间复杂度为 O(logn),最多需要进行 m 次二分查找。
法三、Z 字形查找
- 每一行都是升序,对每一行进行二分查找
var searchMatrix = function(matrix, target) {
const m = matrix.length, n = matrix[0].length;
let x = 0, y = n - 1;//右上角开始
while (x < m && y >= 0) {
if (matrix[x][y] === target) {
return true;
}
if (matrix[x][y] > target) {//当前元素大于目标值,其这一列的下面元素都大于,不考虑
--y;
} else {//当前元素小于目标值,其这一行的左边元素都小于,不考虑
++x;
}
}
return false;
};
标签:
力扣hot100-js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人