【Swift】LeetCode 240.搜索二维矩阵 II

240.搜索二维矩阵 II

题目描述

思路 and Swift 题解

这道题可以使用二分搜索来快速解决。

具体来说,首先比较数组当中一行的第一个元素是否比target大,如果是的话,那么就没有继续比下去的必要了,因为后面的数必然都比target大,直接返回false

否则,对这一行进行二分搜索。我们采用左闭右开的方式进行搜索,如果nums[l] == target,则返回true。否则继续去下一行进行比对与二分搜索。

一个优化是,可以首先让target与这一行的首尾元素进行比较。如果target在首尾元素构成的闭区间当中,再进行二分搜索。

完整的 Swift 题解是:

swift 复制代码
class Solution {
    func searchMatrix(_ matrix: [[Int]], _ target: Int) -> Bool {
        var m = matrix.count
        var n = matrix[0].count

        for i in 0..<m {
            if target < matrix[i][0] {
                return false
            } else {
                var l = 0, r = n - 1
                while l < r {
                    var mid = (l + r) / 2
                    if matrix[i][mid] < target {
                        l = mid + 1
                    } else {
                        r = mid
                    }
                }

                if matrix[i][l] == target {
                    return true
                }
            }
        }
        return false
    }
}
相关推荐
Antonio9151 天前
【Swift】Swift基础语法:函数、闭包、枚举、结构体、类与属性
开发语言·swift
Antonio9151 天前
【Swift】 Swift 基础语法:变量、类型、分支与循环
开发语言·swift
songgeb1 天前
[WWDC 21]Detect and diagnose memory issues 笔记
性能优化·swift
00后程序员张3 天前
Swift 应用加密工具的全面方案,从源码混淆到 IPA 成品加固的多层安全实践
安全·ios·小程序·uni-app·ssh·iphone·swift
非专业程序员3 天前
Swift 多线程读变量安全吗?
swiftui·swift
Sirius Wu4 天前
开源训练框架:MS-SWIFT详解
开发语言·人工智能·语言模型·开源·aigc·swift
从零开始学习人工智能4 天前
USDT区块链转账 vs SWIFT跨境转账:技术逻辑与场景博弈的深度拆解
开发语言·ssh·swift
RickeyBoy4 天前
Swift6 @retroactive:Swift 的重复协议遵循陷阱
swiftui·swift
东坡肘子7 天前
Homebrew 5.0:并行加速、MCP 加持,与 Intel 的最后倒计时 -- 肘子的 Swift 周报 #0111
rust·swiftui·swift
RickeyBoy7 天前
Swift 6 迁移常见 crash: _dispatch_assert_queue_fail
swiftui·swift