算法(TS):搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 输出:true

解法一

从左上角开始找,行首比target小,行尾比target大,则target可能在本行,其余情况均不在本行

ts 复制代码
function searchMatrix(matrix: number[][], target: number): boolean {
    const colTotal = matrix[0].length
    let isExist = false;
    for (const row of matrix) {
        const head = row[0]
        const tail = row[colTotal -1]
        if (head === target || tail === target) {
            isExist = true
            break
        }

        if (head < target && tail > target) {
            // 遍历本行
            isExist = row.indexOf(target) > -1
            if (isExist) {
                break
            }
        }
    }

    return isExist
};

空间复杂度O(1),时间复杂度O(nlogn)

解法二

从右上角开始找,如果查找到的值小于 target,则往下找,如果查找到的值大于 target,则往左找

ts 复制代码
function searchMatrix(matrix: number[][], target: number): boolean {
    let rowIndex = 0
    let colIndex = matrix[0].length - 1
    let isExist = false
    while(colIndex >= 0 && rowIndex < matrix.length) {
        const current = matrix[rowIndex][colIndex]
        if (current === target) {
            isExist = true
            break
        }

        if (current < target) {
            rowIndex++
        } else {
            colIndex--
        }
    }

    return isExist
};

空间复杂度 O(1),时间复杂度O(n)

相关推荐
朱剑君6 分钟前
排序算法——桶排序
算法·排序算法
MeiYu_1238 分钟前
【数据结构与算法】常见排序算法详解(C++实现)
数据结构·c++·算法·排序算法
dy171714 分钟前
vue3 element-plus 输入框回车跳转页面问题处理
前端·javascript·vue.js
请来次降维打击!!!21 分钟前
优选算法系列(8.多源BFS)
java·c++·算法·宽度优先
TextIn智能文档云平台24 分钟前
TextIn ParseX重磅功能更新:支持切换公式输出形式、表格解析优化、新增电子档PDF去印章
java·图像处理·人工智能·算法·自然语言处理·pdf·ocr
LabVIEW开发27 分钟前
LabVIEW温控系统热敏电阻滞后问题
算法·labview知识·labview功能
White_Can41 分钟前
《数据结构:二叉搜索树(Binary Search Tree)》
数据结构·c++·算法
I AM_SUN1 小时前
2398.预算内的最多机器人数目 滑动窗口+单调队列
数据结构·c++·算法·leetcode·职场和发展
已经成为了代码的形状1 小时前
牛客周赛 Round 91
开发语言·c++·算法
2301_789169541 小时前
ai说什么是注解,并以angular ts为例
javascript