算法(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)

相关推荐
Fan_web4 分钟前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
sp_fyf_202413 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
Jiaberrr1 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
我是哈哈hh2 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Tiffany_Ho2 小时前
【TypeScript】知识点梳理(三)
前端·typescript
Tisfy2 小时前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
Mephisto.java2 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
robin_suli2 小时前
滑动窗口->dd爱框框
算法
丶Darling.2 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5202 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法