LeetCode 259 題全解析:Swift 快速找出“滿足條件”的三人組

在這里插入圖片描述
在這里插入圖片描述

文章目錄

    • 摘要
    • 描述
      • 示例 1:
      • 示例 2:
      • 示例 3:
    • 題解答案(Swift)
    • 題解代碼分析
    • 示例測試及結果
    • 時間復雜度
    • 空間復雜度
    • 總結

摘要

本文圍繞 LeetCode 259 題“較小的三數之和”,通過 Swift 給出兩種解法,并結合雙指針的優化思路,講清楚這類“數組 + 條件組合”類題目常見的解決套路。同時附上可運行 Demo,幫助你快速上手并掌握三數問題的變種場景。

描述

題目要求:
給定一個整數數組 nums,以及一個目標值 target,請你統計在所有不同的三元組 (i, j, k) 中,滿足:

nums[i] + nums[j] + nums[k] < target 且 i < j < k

的組合總數,并返回這個值。

示例 1:

輸入: nums = [-2, 0, 1, 3], target = 2  
輸出: 2  
解釋: 滿足的組合有 (-2, 0, 1)(-2, 0, 3)

示例 2:

輸入: nums = [], target = 0  
輸出: 0

示例 3:

輸入: nums = [0], target = 0  
輸出: 0

題解答案(Swift)

這道題其實是“三數和”的一個變種,只不過目標變成了 < target,不再是 == 0。最直觀的解法是暴力三重循環,但效率感人,時間復雜度是 O(n3)。這里我們采用排序 + 雙指針的思路,降低時間復雜度。

題解代碼分析

func threeSumSmaller(_ nums: [Int], _ target: Int) -> Int {let sorted = nums.sorted()var count = 0for i in 0..<sorted.count - 2 {var left = i + 1var right = sorted.count - 1while left < right {let sum = sorted[i] + sorted[left] + sorted[right]if sum < target {// 所有 [left, right) 的組合都滿足條件count += right - leftleft += 1} else {right -= 1}}}return count
}

示例測試及結果

print(threeSumSmaller([-2, 0, 1, 3], 2))  // 輸出:2
print(threeSumSmaller([], 0))            // 輸出:0
print(threeSumSmaller([0], 0))           // 輸出:0
print(threeSumSmaller([1, 2, 3, 4, 5], 9)) // 輸出:4

解釋:

  • 對于 [1,2,3,4,5],滿足三數和 < 9 的組合有:
    • 1+2+3=6
    • 1+2+4=7
    • 1+2+5=8
    • 1+3+4=8

共 4 個。

時間復雜度

  • 排序需要 O(n log n)
  • 主循環是 O(n2)

整體時間復雜度:O(n2),比暴力三重循環好很多。

空間復雜度

  • 排序用了額外空間(可能是快排的棧)
  • 主要是常數級別的變量,沒有使用額外數組

空間復雜度:O(1)(不考慮排序時的棧開銷)

總結

這題其實屬于“三數問題”的系列題目,只不過目標條件從 == target 變成了 < target。一旦習慣了排序 + 雙指針的套路,這類題目處理起來就非常順手了。

也建議大家嘗試思考下另外兩個方向:

  • 如果是 > 怎么辦?
  • 如果不能排序怎么辦?

另外也可以思考怎么把這類題目封裝成通用的“多數和小于目標”的函數,能提升在面試中的發揮空間。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77633.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第八節:React HooksReact 18+新特性-React Server Components (RSC) 工作原理

? 與SSR區別&#xff1a;零客戶端JS、服務端數據直出 ? 搭配Next.js 14使用場景 React Server Components (RSC) 工作原理及 Next.js 14 應用場景解析 一、RSC 核心工作原理 React Server Components (RSC) 是 React 18 引入的顛覆性特性&#xff0c;其設計目標是 服務端與…

萬字解析TCP

通過學習視頻加博客的組合形式&#xff0c;整理了一些關于TCP協議的知識。 *圖源&#xff1a;臨界~的csdn博客。 一、TCP建立連接 TCP的建立連接&#xff0c;大致可以分為面向連接、TCP報文結構、TCP的三次握手、TCP的建立狀態、SYN泛洪攻擊。 1.1、面向連接 面向連接 --- …

前端vue+typeScritp+elementPlus基礎頁面實現:

效果&#xff1a; 前端代碼&#xff1a; index.vue: <template><el-container><el-main><el-card class"search-card" shadow"never"><transition :enter-active-class"proxy?.animate.searchAnimate.enter" :le…

微電網與分布式能源:智能配電技術的場景化落地

安科瑞顧強 隨著數字化轉型與能源革命的加速推進&#xff0c;電力系統正經歷從傳統模式向智能化、網絡化方向的深刻變革。用戶側的智能配電與智能用電技術作為這一變革的核心驅動力&#xff0c;正在重塑電力行業的生態格局。本文將從技術架構、應用場景及未來趨勢等維度&#…

綠幕摳圖直播軟件-藍松摳圖插件--使用相機直播,燈光需要怎么打?

使用SONY相機進行綠幕摳圖直播時&#xff0c;燈光布置是關鍵&#xff0c;直接影響摳圖效果和直播畫質。以下是詳細的燈光方案和注意事項&#xff1a; 一、綠幕燈光布置核心原則 均勻照明&#xff1a;綠幕表面光線需均勻&#xff0c;避免陰影和反光&#xff08;亮度差控制在0.5…

Linux Privilege Escalation: LD_PRELOAD

聲明&#xff1a;本文所有操作需在授權環境下進行&#xff0c;嚴禁非法使用&#xff01; 0x01 什么是 LD_PRELOAD&#xff1f; LD_PRELOAD 是 Linux 系統中一個特殊的環境變量&#xff0c;它允許用戶在程序啟動時優先加載自定義的動態鏈接庫&#xff08;.so 文件&#xff09;&…

程序性能(1)嵌入式基準測試工具

程序性能(1)嵌入式基準測試工具 Author&#xff1a;Once Day date: 2025年4月19日 漫漫長路&#xff0c;才剛剛開始… 全系列文檔查看&#xff1a;Perf性能分析_Once-Day的博客-CSDN博客 參考文檔: CPU Benchmark – MCU Benchmark – CoreMark – EEMBC Embedded Micropr…

ArrayList的subList的數據仍是集合

ArrayList的subList結果不可強轉成ArrayList&#xff0c;否則會拋出 ClassCastException異常 ? 級別&#xff1a; 【CRITICAL】 ? 規約類型&#xff1a;BUG ? 最壞影響&#xff1a; 程序錯誤&#xff0c;拋出異常 說明&#xff1a;subList 返回的是ArrayList的內部類SubL…

Notepad++中將文檔格式從Windows(CR LF)轉換為Unix(LF)

在Windows中用記事本寫了一個.sh的Linux運行腳本&#xff0c;是無法直接在Linux中執行&#xff0c;需要首先把文本編碼格式轉換為Unix的&#xff0c;特別是換行符這些&#xff0c;轉換步驟如下&#xff1a; 1、打開文檔 在Notepad中打開需要轉換的文件。 2、進入文檔格式轉換…

使用Ingress發布應用程序

使用Ingress發布應用程序 文章目錄 使用Ingress發布應用程序[toc]一、什么是Ingress二、定義Ingress三、什么是Ingress控制器四、部署nginx Ingress控制器1.了解nginx Ingress控制器的部署方式2.安裝nginx Ingress控制器3.本地實際測試 五、使用Ingress對外發布應用程序1.使用D…

【網絡編程】TCP數據流套接字編程

目錄 一. TCP API 二. TCP回顯服務器-客戶端 1. 服務器 2. 客戶端 3. 服務端-客戶端工作流程 4. 服務器優化 TCP數據流套接字編程是一種基于有連接協議的網絡通信方式 一. TCP API 在TCP編程中&#xff0c;主要使用兩個核心類ServerSocket 和 Socket ServerSocket Ser…

力扣刷題Day 21:兩數之和(1)

1.題目描述 2.思路 暴力解法雖然不超時間限制&#xff0c;但是題解實在太妙了&#xff0c;哈希大法好&#xff01; 3.代碼&#xff08;Python3&#xff09; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hash_table dict()for i, num i…

關于UE5的抗鋸齒和TAA

關于閃爍和不穩定現象的詳細解釋 當您關閉抗鋸齒技術時&#xff0c;場景中會出現嚴重的閃爍和不穩定現象&#xff0c;尤其在有細節紋理和小物體的場景中。這種現象的技術原因如下&#xff1a; 像素采樣問題 在3D渲染中&#xff0c;每個像素只能表示一個顏色值&#xff0c;但…

【MySQL】MySQL建立索引不知道注意什么?

基本原則&#xff1a; 1.選擇性原則&#xff1a; 選擇高選擇性的列建立索引(該列有大量不同的值) 2.適度原則&#xff1a;不是越多越好&#xff0c;每個索引都會增加寫入開銷 列選擇注意事項&#xff1a; 1.常用查詢條件列&#xff1a;WHERE字句中頻繁使用的列 2.連接操作列…

Vue3 + TypeScript中provide和inject的用法示例

基礎寫法&#xff08;類型安全&#xff09; typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定義類型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…

樹莓派超全系列教程文檔--(33)樹莓派啟動選項

樹莓派啟動選項 啟動選項start_file &#xff0c;fixup_filecmdlinekernelarm_64bitramfsfileramfsaddrinitramfsauto_initramfsdisable_poe_fandisable_splashenable_uartforce_eeprom_reados_prefixotg_mode &#xff08;僅限Raspberry Pi 4&#xff09;overlay_prefix配置屬…

java怎么找bug?Arthas原理與實戰指南

Arthas原理與實戰指南 1. Arthas簡介 Arthas是阿里巴巴開源的Java診斷工具&#xff0c;其名字取自《魔獸世界》的人物阿爾薩斯。它面向線上問題定位&#xff0c;被廣泛應用于性能分析、定位問題、安全審計等場景。Arthas的核心價值在于它能夠在不修改應用代碼、不重啟Java進程…

Python自學第1天:變量,打印,類型轉化

突然想學Python了。經過Deepseek的推薦&#xff0c;下載了一個Python3.12安裝。安裝過程請自行搜索。 乖乖從最基礎的學起來&#xff0c;廢話不說了&#xff0c;上鏈接&#xff0c;呃&#xff0c;打錯了&#xff0c;上知識點。 變量的定義 # 定義一個整數類型的變量 age 10#…

基于STM32中斷講解

基于STM32中斷講解 一、NVIC講解 簡介&#xff1a;當一個中斷請求到達時&#xff0c;NVIC會確定其優先級并決定是否應該中斷當前執行的程序&#xff0c;以便及時響應和處理該中斷請求。這種設計有助于提高系統的響應速度和可靠性&#xff0c;特別是在需要處理大量中斷請求的實…

游戲盾和高防ip有什么區別

游戲盾和高防IP都是針對網絡攻擊的防護方案&#xff0c;但??核心目標、技術側重點和應用場景存在顯著差異??。以下是兩者的詳細對比分析&#xff1a; ??一、核心定位與目標?? ??維度????高防IP????游戲盾????核心目標??抵御大流量網絡攻擊&#xff08…