【力扣】第15題:三數之和

原文鏈接:15. 三數之和 - 力扣(LeetCode)

思路解析

雙指針:

? ? ? ? (1)頭尾指針對應值相加如果大于目標值(target),那么只能尾指針-1;如果小于target,那么只能頭指針+1。

? ? ? ? (2)如何去除重復?因為已經排好序了,如果下一個要檢索的值等于前一個檢索的值,直接跳過。

    public List<List<Integer>> threeSum(int[] nums) {/*** 雙指針:* 頭指針:開始指向當前元素的下一個元素* 尾指針:開始指向最后一個元素*/Arrays.sort(nums);int len = nums.length;List<List<Integer>> ans = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue;int j = i + 1;int k = len - 1;int x = nums[i];while(j<k){int result = x+nums[j]+nums[k];if(result>0){k--;}else if(result<0){j++;}else {ans.add(Arrays.asList(x,nums[j],nums[k]));j++;//繼續排查當前遍歷的i,還有沒有別的組合while(nums[j]==nums[j-1] && j<k){j++;}k--;while(nums[k]==nums[k+1] && j<k){k--;}}}}return ans;}

兩個優化:

????????優化1:如果最小的三個值相加都大于0,那么沒有滿足要求 的,直接break

????????優化2:如果當前值和最大的兩個值相加都小于0,那么本次遍歷的i沒有滿足要求的,直接continue

    public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);int len = nums.length;List<List<Integer>> ans = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue;int j = i + 1;int k = len - 1;int x = nums[i];if(x+nums[j]+nums[j+1] > 0) break;//優化1if(x+nums[k]+nums[k-1] < 0) continue;//優化2while(j<k){int result = x+nums[j]+nums[k];if(result>0){k--;}else if(result<0){j++;}else {ans.add(Arrays.asList(x,nums[j],nums[k]));j++;//繼續排查當前遍歷的i,還有沒有別的組合while(nums[j]==nums[j-1] && j<k){j++;}k--;while(nums[k]==nums[k+1] && j<k){k--;}}}}return ans;}

同樣的思路,會做這一題,你就會兩數之和了,兩數之和也是用這個思想,更簡單

1. 兩數之和 - 力扣(LeetCode)

?

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

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

相關文章

Linux PCI總線子系統

The Linux Kernel Archives Linux PCI總線子系統 — The Linux Kernel documentation

LeetCode熱題100--24. 兩兩交換鏈表中的節點--中等

1. 題目 給你一個鏈表&#xff0c;兩兩交換其中相鄰的節點&#xff0c;并返回交換后鏈表的頭節點。你必須在不修改節點內部的值的情況下完成本題&#xff08;即&#xff0c;只能進行節點交換&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4] 輸出&#x…

京東視覺算法面試30問全景精解

京東視覺算法面試30問全景精解 ——零售智能 供應鏈創新 工業落地:京東視覺算法面試核心考點全覽 前言 京東作為中國領先的零售科技企業,在智能物流、供應鏈管理、智能倉儲、商品識別、工業質檢等領域持續推動視覺AI的創新與大規模落地。京東視覺算法崗位面試不僅關注候…

【設計模式】觀察者模式 (發布-訂閱模式,模型-視圖模式,源-監聽器模式,從屬者模式)

觀察者模式&#xff08;Observer Pattern&#xff09;詳解一、觀察者模式簡介 觀察者模式&#xff08;Observer Pattern&#xff09; 是一種 行為型設計模式&#xff08;對象行為型模式&#xff09;&#xff0c;它定義了一種一對多的依賴關系&#xff0c;讓多個觀察者對象同時監…

Linux的`<< EOF`(Here-Document)詳解多回答筆記250722

Linux的<< EOF(Here-Document)詳解多回答筆記250722 Linux 中的 << EOF 結構稱為 Here Document&#xff08;立即文檔或嵌入文檔&#xff09;&#xff0c;它是一種在 Shell 腳本中直接嵌入多行文本輸入流&#xff08;通常作為命令的標準輸入&#xff09;的方式。E…

Go語言實戰案例-簡單配置文件(INI格式)解析器

以下是《Go語言100個實戰案例》中的 文件與IO操作篇 - 案例20&#xff1a;簡單配置文件&#xff08;INI格式&#xff09;解析器 的完整內容&#xff0c;適合入門學習如何用 Go 語言解析常見的 .ini 配置文件格式。&#x1f3af; 案例目標使用 Go 語言解析一個 .ini 格式的配置文…

用 PyTorch 實現全連接網絡識別 MNIST 手寫數字

目錄 一、什么是全連接網絡 二、代碼實現步驟 1. 導入必要的庫 2. 數據準備 3. 定義網絡結構 4. 模型訓練 5. 模型保存和加載 6. 預測單張圖片 7. 主函數 三、運行結果說明 四、小結 一、什么是全連接網絡 全連接神經網絡&#xff08;Fully Connected Neural Networ…

vscode怎么安裝MINGW

下載&#xff1a; 第一步選擇MINGW官網&#xff1a;MinGW-w64 - for 32 and 64 bit Windows - SourceForge.net 點擊Files 點擊Toolchains targetting Win64 點擊第一個 Personal Builds 點擊mingw-builds 選擇8.1.0 點擊第二個 threads-posix 點擊第二個seh 最后左鍵點擊下…

CSS圖片分層設置

在CSS中實現圖片分層效果&#xff0c;主要通過定位屬性和層疊上下文控制。以下是核心實現方法和示例&#xff1a; 一、核心實現原理定位方式 使用 position: relative/absolute/fixed 使圖片脫離文檔流 .layer {position: absolute; /* 關鍵屬性 */top: 0;left: 0; }層疊控制 通…

GEMINUS 和 Move to Understand a 3D Scene

論文鏈接&#xff1a;https://arxiv.org/abs/2507.14456 代碼鏈接&#xff1a;https://github.com/newbrains1/GEMINUS 端到端自動駕駛的挑戰 端到端自動駕駛是一種“一站式”方法&#xff1a;模型直接從傳感器輸入&#xff08;如攝像頭圖像&#xff09;生成駕駛軌跡或控制信號…

算法與數據結構:線性表

C語言數據結構基礎&#xff1a;線性表詳解線性表是數據結構中最基礎、最常用的形式&#xff0c;就像一列整齊排隊的游客&#xff1a;每個元素有固定位置&#xff08;前驅和后繼&#xff09;&#xff0c;長度可動態變化。在C語言中&#xff0c;它主要通過順序表&#xff08;數組…

制作mac 系統U盤

使用 installinstallmacos.py&#xff08;更兼容&#xff09; 蘋果官方不提供所有歷史版本的安裝器&#xff0c;但可以通過一個開源腳本下載&#xff08;Apple 提供的企業支持工具&#xff09;&#xff1a; git clone https://github.com/munki/macadmin-scripts.git cd macadm…

滲透部分總結

docker環境搭建以及dns等原理講解Docker搭建&#xff1a;Linux 系統上安裝 Docker 引擎并啟動服務&#xff1a;# 安裝Docker引擎 curl -fsSL https://get.docker.com | sh 通過 curl 下載并執行 Docker 官方的安裝腳本&#xff0c;這會自動配置 Docker 倉庫并安裝最新版本的 Do…

k8s pvc是否可綁定在多個pod上

1.pvc是否可綁定在多個podPVC 是否能被多個 Pod 使用&#xff0c;取決于它的 accessModes。PVC 的 accessModes是否支持多個 Pod 同時使用說明ReadWriteOnce (RWO)? 若多個Pod&#xff0c;需在相同節點上&#xff08;僅允許被單個節點上的Pod掛載&#xff09;常用于本地磁盤、…

如何加固Endpoint Central服務器的安全?(下)

Endpoint Central 作為企業終端管理的 “中樞系統”&#xff0c;掌控著全網終端的補丁推送、軟件部署、配置管理、遠程控制等關鍵權限&#xff0c;存儲著大量終端資產信息、用戶數據及企業策略配置。一旦服務器被攻破&#xff0c;攻擊者可能篡改管理指令&#xff08;如推送惡意…

信息整合注意力IIA,通過雙方向注意力機制重構空間位置信息,動態增強目標關鍵特征并抑制噪聲

在遙感圖像語義分割等視覺任務中&#xff0c;編碼器 - 解碼器結構通過跳躍連接融合多尺度特征時&#xff0c;常面臨兩大挑戰&#xff1a;一是編碼器的局部細節特征與解碼器的全局語義特征融合時&#xff0c;空間位置信息易丟失&#xff0c;導致目標定位不準&#xff1b;二是復雜…

如何遷移jenkins至另一臺服務器

前言公司舊的服務器快到期了&#xff0c;需要將部署在其上的jenkins整體遷移到另一臺服務器&#xff0c;兩臺都是aws ec2服務器。文章主要提供給大家一種遷移思路&#xff0c;并不一定是最優解&#xff0c;僅供參考&#xff0c;大家根據實際情況自行選用和修改&#xff0c;舉一…

在vue中遇到Uncaught TypeError: Assignment to constant variable(常亮無法修改)

1.問題如下:2.出現這個問題的原因----在設計變量的時候采用了const來進行修飾,在修改的時候直接對其進行修改3.利用響應式變量的特點&#xff0c;修改為下面這樣就可以正常了

RCE隨筆-奇技淫巧(2)

Linux命令長度限制在7個字符的情況下&#xff0c;如何拿到shell <?php $param $_REQUEST[param]; If ( strlen($param) < 8 ) { echo shell_exec($param); }分析代碼&#xff1a;這段代碼傳入參數param然后進入if語句判斷是否小于8個字符&#xff0c;然后如果小于就會進…

設計模式九:構建器模式 (Builder Pattern)

動機(Motivation)1、在軟件系統中&#xff0c;有時候面臨著“一個復雜對象”的創建工作&#xff0c;其通常由各個部分的子對象用一定的算法構成&#xff1b;由于需求的變化&#xff0c;這個復雜對象的各個部分經常面臨著劇烈的變化&#xff0c;但是將它們組合在一起的算法卻相對…