15.三數之和-力扣(python)

給你一個整數數組?nums?,判斷是否存在三元組?[nums[i], nums[j], nums[k]]?滿足?i != ji != 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 。

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105


代碼:

from typing import List  # 導入 List 類型,用于類型注解class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:ans = []  # 初始化一個空列表,用于存儲最終的三元組結果nums.sort()  # 將數組排序,方便后續使用雙指針法n = len(nums)  # 獲取數組的長度# 遍歷數組,i 作為三元組的第一個數的索引# 因為需要三個數,所以 i 最多遍歷到倒數第三個數(n-2)for i in range(n - 2):x = nums[i]  # 當前固定的第一個數# 如果當前數 x 和前一個數相同,則跳過本次循環# 這是為了避免重復的三元組if i > 0 and x == nums[i - 1]:continue# 優化:如果當前 x 加上最小的兩個數(nums[i+1] 和 nums[i+2])已經大于 0# 由于數組是排序的,后面的數只會更大,所以可以直接退出循環if x + nums[i + 1] + nums[i + 2] > 0:break# 優化:如果當前 x 加上最大的兩個數(nums[n-1] 和 nums[n-2])仍然小于 0# 說明當前 x 太小,即使加上最大的兩個數也無法達到 0,所以跳過當前 xif x + nums[n - 1] + nums[n - 2] < 0:continue# 定義雙指針 j 和 kj = i + 1  # j 從 i 的下一個位置開始k = n - 1  # k 從數組的末尾開始# 使用雙指針法查找滿足條件的三元組while j < k:s = x + nums[j] + nums[k]  # 計算當前三元組的和if s > 0:  # 如果和大于 0,說明需要減小和,將右指針 k 向左移動k -= 1elif s < 0:  # 如果和小于 0,說明需要增大和,將左指針 j 向右移動j += 1else:  # 如果和等于 0,找到一個滿足條件的三元組ans.append([x, nums[j], nums[k]])  # 將三元組加入結果列表j += 1  # 移動左指針k -= 1  # 移動右指針# 跳過重復的 nums[j],避免重復的三元組while j < k and nums[j] == nums[j - 1]:j += 1# 跳過重復的 nums[k],避免重復的三元組while k > j and nums[k] == nums[k + 1]:k -= 1return ans  # 返回最終的三元組結果

測試結果

輸入

nums?=

[-1,0,1,2,-1,-4]

輸出

[[-1,-1,2],[-1,0,1]]

預期結果

[[-1,-1,2],[-1,0,1]]

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

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

相關文章

numpy學習筆記14:模擬隨機游走過程

numpy學習筆記14&#xff1a;模擬隨機游走過程 隨機游走是一種數學統計模型&#xff0c;其中的每一步方向和大小都是隨機的。下面使用 NumPy 模擬一維和二維的隨機游走過程&#xff1a; 1.代碼示例 import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.s…

YOLOv11 目標檢測

本文章不再贅述anaconda的下載以及虛擬環境的配置&#xff0c;博主使用的python版本為3.8 1.獲取YOLOv11的源工程文件 鏈接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下載解壓 2.需要自己準備的文件 文件結構如下&#xff1a;紅…

dijkstra算法——47. 參加科學大會

卡碼網:47. 參加科學大會https://kamacoder.com/problempage.php?pid=1047 題目描述 小明是一位科學家,他需要參加一場重要的國際科學大會,以展示自己的最新研究成果。 小明的起點是第一個車站,終點是最后一個車站。然而,途中的各個車站之間的道路狀況、交通擁堵程度以…

Rust語言介紹和猜數字游戲的實現

文章目錄 Rust語言介紹和猜數字游戲的實現cargo是什么使用Rust編寫猜數字 Rust語言介紹和猜數字游戲的實現 Rust語言是一種系統編程語言&#xff0c;核心強調安全性、并發性以及高性能&#xff0c;由類似于C/C的底層控制能力&#xff0c;性能也非常接近&#xff0c;Rust有一些…

Ubuntu下Docker部署Misskey:打造你的去中心化社交平臺

引言 在信息爆炸的時代&#xff0c;人們對于社交平臺的需求日益增長&#xff0c;同時也更加注重數據的隱私和自由。Misskey作為一個開源的去中心化社交平臺&#xff0c;為用戶提供了一個全新的選擇。本文將詳細介紹如何在Ubuntu Linux環境下&#xff0c;利用Docker快速部署Mis…

DeepSeek Chat 自動化交互技術分析

本文將對 DeepSeek Chat 自動化交互腳本進行技術分析&#xff0c;包括代碼結構、實現原理以及關鍵技術點。該腳本使用 Selenium 實現了對 DeepSeek Chat 平臺的自動化登錄和問答功能。 1. 代碼結構概覽 該腳本主要由以下幾個部分組成&#xff1a; 環境準備與依賴導入&#x…

128. Longest Consecutive Sequence

如果n-1存在于數組中&#xff0c;則以n開頭的連續序列可以忽略掉&#xff0c;因為以n-1開頭的連續序列的長度肯定至少比以n開頭的連續序列長1個元素。這是本題的關鍵。然后利用哈希表查詢元素是否在數組中。 class Solution { public:int longestConsecutive(vector<int>…

《SQL編程思想》中的 MySQL 建表語句和測試數據

《SQL編程思想》中的 MySQL 建表語句 建表語句 -- 創建 4 個示例表和索引 CREATE TABLE department( dept_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 部門編號&#xff0c;自增主鍵, dept_name VARCHAR(50) NOT NULL COMMENT 部門名稱) ENGINEInnoDB COMM…

基于ssm學科競賽小程序的設計及實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著信息時代的來臨&#xff0c;過去的學科競賽管理方式的缺點逐漸暴露&#xff0c;本次對過去的學科競賽管理方式的缺點進行分析&#xff0c;采取計算機方式構建學科競賽小程序。本文通過閱讀相關文獻&#xff0c;研究國內外相關技術&#xff0c;提出了一種關于競賽信息…

【redis】什么是持久化之 RDB

什么是持久化 MySQL 的事務&#xff0c;有四個比較核心的特性&#xff1a; 原子性一致性持久性>持久化&#xff08;說的一回事&#xff09; 把數據存儲在硬盤上>持久把數據存在內存上>不持久重啟進程/重啟主機之后&#xff0c;數據是否還存在 隔離性 Redis 是一個內存…

Python 鼠標軌跡算法 - 防止游戲檢測

一.簡介 鼠標軌跡算法是一種模擬人類鼠標操作的程序&#xff0c;它能夠模擬出自然而真實的鼠標移動路徑。 鼠標軌跡算法的底層實現采用C/C語言&#xff0c;原因在于C/C提供了高性能的執行能力和直接訪問操作系統底層資源的能力。 鼠標軌跡算法具有以下優勢&#xff1a; 模擬…

游戲立項時期隨筆記錄(1)

模擬經營的項目還沒有完全結束&#xff0c;這幾天又有可能涉及到一個新項目。感想隨筆記錄一下&#xff0c;防止忘記。今天一天整理這個&#xff0c;搞得今天沒時間看數學和AI。 在 Unity3D 游戲前端主程序的立項時期&#xff0c;核心目標是明確技術方向、評估可行性、搭建基礎…

Channel-wise Knowledge Distillation for Dense Prediction論文閱讀和

paper&#xff1a;https://arxiv.org/pdf/2011.13256.pdf code&#xff1a;https://github.com/open-mmlab/mmrazor 這篇paper主要是商湯開源的mmrazor中提及在detection有效果&#xff0c;我之前記錄的幾篇sota文章雖然在各自的paper中在detection領域都有提及有增益&#…

hide函數的使用方法

在編程中&#xff0c;我們常常需要控制元素的顯示與隱藏。特別是在前端開發中&#xff0c;hide 函數是一個非常常見的操作&#xff0c;尤其是在 JavaScript 和 jQuery 中。它可以讓你輕松地將元素從視圖中隱藏&#xff0c;進而提升用戶交互體驗和頁面的響應能力。本文將介紹如何…

【MySQL】基本操作 —— DML 與約束

目錄 DML 基本介紹DML 常見操作添加數據 insert給指定字段添加數據給全部字段添加數據給指定字段批量添加數據給全部字段批量添加數據 修改數據 update刪除數據 delete 約束基本概念約束操作主鍵約束添加單列主鍵添加多列主鍵&#xff08;聯合主鍵&#xff09;修改表結構添加主…

nginx配置轉發到另一個網站或另一臺服務器的服務

需求背景 在一臺服務器上安裝了一個服務&#xff0c;不想使用ip:port方式&#xff0c;想使用域名打開這個服務的地址。 1. 配置轉發 1.1 參數解釋 listen&#xff1a;指定 Nginx 監聽的端口。在上面的例子中&#xff0c;Nginx 監聽 8888 端口。server_name&#xff1a;用于…

HarmonyOS三層架構實戰

目錄&#xff1a; 1、三層架構項目結構1.0、三層架構簡介1.1、 common層&#xff08;主要放一些公共的資源等&#xff09;1.2、 features層&#xff08;主要模塊定義的組件以及圖片等靜態資源&#xff09;1.3、 products層&#xff08;主要放主頁面層和一些主要的資源&#xff…

macOS homebrew - 切換源

https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/ 環境變量中 添加&#xff1a; export HOMEBREW_BREW_GIT_REMOTE"https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE"https://mirrors.tuna.tsinghua.edu.cn…

ETL中的實用功能以及數據集成方式

在企業數字化轉型的進程中&#xff0c;數據集成扮演著至關重要的角色。它不僅是實現信息流動和系統協同的關鍵步驟&#xff0c;更是提升企業運營效率和決策能力的核心驅動力。ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作為數據集成的重要工具&…

基于Springboot+Typst的PDF生成方案,適用于報告打印/標簽打印/二維碼打印等

基于SpringbootTypst的PDF生成方案&#xff0c;適用于報告打印/標簽打印/二維碼打印等。 僅提供后端實現 Typst2pdf-for-report/label/QR code github 環境 JDK11linux/windows/mac 應用場景 適用于定制化的報告模板/標簽/條碼/二維碼等信息的pdf生成方案。通過瀏覽器的p…