LeetCode題解---<三數之和>

文章目錄

    • 題目<三數之和>--Python解法
    • 題解

題目<三數之和>–Python解法

給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i != j、i != k 且 j != k ,同時還滿足 nums[i] + nums[j] + nums[k] == 0 。請你返回所有和為 0 且不重復的三元組。

注意:答案中不可以包含重復的三元組。

示例 1:
輸入:nums = [-1,0,1,2,-1,-4]
輸出:[[-1,-1,2],[-1,0,1]]
解釋:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元組是 [-1,0,1] 和 [-1,-1,2] 。
注意,輸出的順序和三元組的順序并不重要。

示例 2:
輸入:nums = [0,1,1]
輸出:[]
解釋:唯一可能的三元組和不為 0 。

示例 3:
輸入:nums = [0,0,0]
輸出:[[0,0,0]]
解釋:唯一可能的三元組和為 0 。

題解

該題與 兩數之和 相似。

采用雙指針解法:

class Solution(object):def threeSum(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""nums.sort()               # 排序數組res = []                  # 存儲結果m = len(nums)             # 數組長度for i in range(m - 2):    # 遍歷到倒數第三個元素if i > 0 and nums[i] == nums[i - 1]:  # 跳過重復的 icontinuel = i + 1             # 左指針r = m - 1             # 右指針while l < r:total = nums[l] + nums[r]target = -nums[i]  # 因為 nums[i] + nums[l] + nums[r] = 0if total == target:res.append([nums[i], nums[l], nums[r]])l += 1r -= 1# 跳過重復的 l 和 rwhile l < r and nums[l] == nums[l - 1]:l += 1while l < r and nums[r] == nums[r + 1]:r -= 1elif total < target:  # 如果和太小,左指針右移l += 1else:                # 如果和太大,右指針左移r -= 1return res

我認為該解法關鍵點在于,將第 i 個元素作為目標元素進行查找,這樣有了目標元素之后,就將三數之和轉換成的兩數之和。

然后比較需要注意的是一些邊界條件的處理以及避免重復得出相同列表的操作,首先是對目標元素的避免重復操作

if i > 0 and nums[i] == nums[i-1]:                #如果遇到重復相同的就下一個,避免得出的列表重復continue                   

然后就是對左指針以及右指針在遍歷數組元素中,相鄰元素的判斷,判斷是否重復,若重復就下一個元素:

while l < r and nums[l] == nums[l-1]:         #如果指針在遍歷過程中,跳過重復的元素l += 1                                    #左指針右移while l < r and nums[r] == nums[r+1]:r -= 1                                    #右指針左移

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

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

相關文章

探索Insplorion氫氣傳感器:高靈敏度與快速響應的創新解決方案

在追求更清潔、更安全能源的過程中&#xff0c;氫氣作為一種理想的清潔能源載體&#xff0c;正日益受到全球的重視。然而&#xff0c;氫氣的廣泛應用也帶來了新的挑戰——如何確保其儲存、運輸和使用的安全性&#xff1f;Insplorion通過其獨特的納米等離子體傳感&#xff08;NP…

【QT】事件(鼠標、按鍵、定時器、窗口)

文章目錄1. 事件1.1 事件的介紹1.2 事件的處理2. 按鍵事件3. 鼠標事件4. 定時器5. 窗口事件1. 事件 1.1 事件的介紹 事件是應用程序內部或者外部產生的事情或者動作的統稱。 在 Qt 中使用?個對象來表示?個事件。所有的 Qt 事件均繼承于抽象類 QEvent。事件是由系統或者 Qt …

STM32固件升級設計——串口IAP升級(基于YMODEM協議)

目錄 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分區定義 2、 主函數 3、YMODEM協議的實現 4、程序跳轉 三、APP程序制作 四、工程配置&#xff08;默認KEIL5&#xff09; 五、運行測試 結束語 概述 IAP&…

Cookie(搭配domain)/Session(搭配HttpServletRequest+HttpSession)

各位看官&#xff0c;大家早安午安晚安呀~~~如果您覺得這篇文章對您有幫助的話歡迎您一鍵三連&#xff0c;小編盡全力做到更好 歡迎您分享給更多人哦今天我們來學習&#xff1a;Cookie/Session1.Cookie/Session的簡述我們在講解HTTP協議的時候已經講解過Cookie了HTTP 協議自身是…

240.搜索二維矩陣Ⅱ

純暴力有點太唐了&#xff0c;不過竟然能過&#xff1b;還有行和列的表示我一直搞反了。。。class Solution {public boolean searchMatrix(int[][] matrix, int target) {for(int i 0 ;i<matrix.length;i){for(int j 0 ;j<matrix[0].length;j){if(matrix[i][j]target)…

【計算機組成原理】-CPU章節學習篇—筆記隨筆

計算機組成原理 CPU 章節知識點總結&#xff08;適用于 408 考研&#xff09;? 一、CPU 的功能與基本結構? 1.1 CPU 的功能? CPU&#xff08;中央處理器&#xff09;是計算機的核心部件&#xff0c;主要功能包括&#xff1a;? 指令控制&#xff1a;程序的順序執行&#xff…

公用測控裝置的功能

公用測控裝置在電力系統中廣泛應用于變電站的高壓開關單元、變壓器本體及低壓側等對象。它集測量、控制、保護于一體&#xff0c;確保電網的安全、穩定運行。公用測控裝置采用高性能硬件架構&#xff0c;如32位微控制器和獨立AD采樣技術&#xff0c;結合軟件算法&#xff0c;實…

數據庫|達夢DM數據庫配置實例步驟

哈嘍&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近因為一個信創項目&#xff0c;要使用達夢DM數據庫&#xff0c; 因此安裝了達夢DM數據庫來學習使用&#xff0c; 上一節中記錄了安裝Windows版本達夢DM數據庫的過程步驟&#xff0c; 這一節緊接著上一節《數據庫…

三十一、【高級特性篇】接口用例參數化與關聯:實現上下文數據傳遞

三十一、【高級特性篇】接口用例參數化與關聯:實現上下文數據傳遞 前言準備工作第一部分:后端數據模型調整1. 升級 `TestCase` 模型2. 生成并應用數據庫遷移3. 更新 `TestCaseSerializer`第二部分:后端測試執行器強化1. 修改 `execute_api_test_case` 函數2. 修改 Celery 任…

PCA通過“找最大方差方向”實現降維,本質是用更少的變量捕捉原始數據的主要模式

什么事 PCA(主成分分析) PCA(主成分分析)的原理與通俗舉例 PCA 是什么? PCA(Principal Component Analysis)是一種常用的降維算法,核心目標是將高維數據映射到低維空間,同時盡可能保留原始數據的關鍵信息(方差最大的方向)。 核心原理:找“最能代表數據的方向”…

JAVA synchronized關鍵字涉及的Monitor對象中 EntryList和WaitSet工作機制

在Java的synchronized同步機制中&#xff0c;Monitor對象的EntryList和WaitSet是兩個關鍵隊列&#xff0c;它們分別管理不同狀態的線程。下面我將詳細解釋它們的工作原理&#xff0c;并提供代碼示例說明。 EntryList&#xff08;鎖競爭隊列&#xff09; 作用機制 EntryList保…

js-day10

JS學習之旅-day101. 作用域1.1 局部作用域1.2 全局作用域1.3 作用域鏈1.4 JS垃圾回收機制&#xff08;GC&#xff09;1.5 閉包1.6 變量提升2. 函數進階2.1 函數提升2.2 函數參數2.3 箭頭函數3. 解構賦值3.1 數組解構3.2 對象解構4. 數組遍歷4.1 forEach4.2 filter1. 作用域 作…

智能數字式毫秒計在實際生活場景中的應用

在電力領域&#xff0c;SYN5307型數字毫秒表可精準監測特高壓變電站斷路器合閘時間差&#xff0c;定位繼電保護裝置信號延遲&#xff1b;工業自動化中&#xff0c;優化汽車焊裝線時序、提升半導體晶圓切割良率&#xff1b;科研計量上&#xff0c;助力量子通信同步校準&#xff…

Java面試基礎:概念

1. Java的特點跨平臺性&#xff1a;Java的 “編寫一次&#xff0c;運行無處不在” 是其最大的特點之一。Java編譯器將源代碼編譯成字節碼(bytecode)&#xff0c;該字節碼可以在任何安裝了Java虛擬機(JVM)的系統上運行。面向對象&#xff1a;Java是一門嚴格的面向對象編程語言&a…

PyQt5高級窗口控件詳解:停靠窗口、多文檔界面與滾動條

掌握PyQt5的高級窗口控件&#xff0c;讓你的GUI應用具備專業級的布局與交互體驗 在PyQt5應用開發中&#xff0c;高效管理窗口布局和實現復雜交互功能是提升用戶體驗的關鍵。本文將深入解析三個核心高級控件&#xff1a;停靠窗口&#xff08;QDockWidget&#xff09;、多文檔界面…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | DrawingApp(畫板組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— DrawingApp組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup>…

Eureka、Nacos、LoadBalance、OpenFeign?之間的區別聯系和協作 (附代碼講解)

這篇文章聊聊微服務里的這幾個老伙計&#xff1a;Eureka、Nacos、LoadBalance、OpenFeign。咱們做微服務開發&#xff0c;總會跟這幾個組件打交道&#xff1a;Eureka、Nacos、Spring Cloud LoadBalancer、OpenFeign。它們各司其職又互相配合&#xff0c;今天就把它們的關系、用…

JavaSE-繼承

繼承&#xff08;inheritance&#xff09;繼承的意義我們首先來看下面兩個類&#xff1a;public class Dog {public String name;public int age;public void eat(){System.out.println(this.name"正在吃飯");}public void bark(){System.out.println(this.name"…

第二屆虛擬現實、圖像和信號處理國際學術會議(VRISP 2025)

重要信息 官網&#xff1a;www.icvisp.net 時間&#xff1a;2025年8月1-3日 地點&#xff1a;中國-長沙 簡介 近年來&#xff0c;虛擬現實技術取得了顯著進步&#xff0c;與5G、云計算和物聯網等新一代信息技術的融合加速&#xff0c;推動了其在硬件、軟件和內容應用等方面…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分離版:整體布局、架構調整(二)

目錄 一、前言 二、后端調整 1.實體類調整 2.菜單相關接口 3.用戶相關接口 4.新增工具類 5.新增菜單樹返回類 6.配置類、攔截器 三、前端調整 1.請求調整 2.頁面布局、樣式調整 1.user.vue 2.index.vue 3.請求攔截 四、開發過程中的問題 五、附&#xff1a…