(LeetCode 面試經典 150 題 ) 15. 三數之和 (排序+雙指針)

題目:15. 三數之和

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

思路:排序+雙指針,時間復雜度0(n^2+nlogn)。

先將數組nums升序排序,方便去重和使用雙指針。第一層for循環來枚舉第一位數,后面使用雙指針來找到第二個、第三個數即可,細節看注釋。

C++版本:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {// 先將數組nums升序排序,方便去重和使用雙指針int n=nums.size();sort(nums.begin(),nums.end());// 答案vector<vector<int>> v;// 遍歷第一個數for(int i=0;i<n-2;i++){// 如果和前一個數重復,跳過if(i!=0&&nums[i]==nums[i-1]) continue;// 后面數之和都大于0,直接退出if(nums[i]+nums[i+1]+nums[i+2]>0) break;// 后面數之和都小于0,跳過if(nums[i]+nums[n-2]+nums[n-1]<0) continue;//雙指針,來遍歷后面兩個數int l=i+1,r=n-1;while(l<r){int sum=nums[i]+nums[l]+nums[r];if(sum<0){l++;}else if(sum>0){r--;}else{v.push_back({nums[i],nums[l],nums[r]});l++;r--;// 避免重復的數while(l<n){if(nums[l]==nums[l-1]) l++;else break;}// 避免重復的數while(r>=l){if(nums[r]==nums[r+1]) r--;else break;}}}}return v;}
};

JAVA版本:

class Solution {public List<List<Integer>> threeSum(int[] nums) {int n=nums.length;Arrays.sort(nums);List<List<Integer>> v=new ArrayList<>();for(int i=0;i<n-2;i++){if(i!=0&&nums[i]==nums[i-1]) continue;if(nums[i]+nums[i+1]+nums[i+2]>0) break;if(nums[i]+nums[n-2]+nums[n-1]<0) continue;int l=i+1,r=n-1;while(l<r){int sum=nums[i]+nums[l]+nums[r];if(sum<0){l++;}else if(sum>0){r--;}else{v.add(Arrays.asList(nums[i],nums[l],nums[r]));l++;r--;while(l<n){if(nums[l]==nums[l-1]) l++;else break;}while(r>=l){if(nums[r]==nums[r+1]) r--;else break;}}}}return v;}
}

GO版本:

func threeSum(nums []int) [][]int {n:=len(nums)slices.Sort(nums)v:=[][]int{}for i:=0;i<n-2;i++ {if i!=0 && nums[i]==nums[i-1] {continue}if nums[i]+nums[i+1]+nums[i+2]>0 {break}if nums[i]+nums[n-2]+nums[n-1] <0 {continue}l,r:=i+1,n-1for l<r {sum:=nums[i]+nums[l]+nums[r]if sum<0 {l++}else if sum>0 {r--}else{v=append(v,[]int{nums[i],nums[l],nums[r]})l++r--for l<r {if nums[l]!=nums[l-1] {break}l++}for l<r {if nums[r]!=nums[r+1] {break}r--}}}}return v
}

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

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

相關文章

easy-springdoc

介紹 簡化springdoc的使用&#xff08;可以搭配knife4j-openapi3-jakarta-spring-boot-starter一起使用&#xff09; maven引用 <dependency><groupId>io.github.xiaoyudeguang</groupId><artifactId>easy-springdoc</artifactId><version>…

配置nodejs,若依

1.配置node.js環境 Node.js — Download Node.js 1.下載好一路下一步&#xff0c;可以安裝到d盤 裝完之后執行 npm -v 顯示版本號即安裝成功 2.安裝好后新建兩個文件夾&#xff0c;node_cache和node_global 3.配置環境變量 新建變量 在path里編輯變量 4.配置用戶變量 5.…

Python學習之路(十二)-開發和優化處理大數據量接口

文章目錄一、接口設計原則二、性能優化策略1. 數據庫優化2. 緩存機制3. 并發模型三、內存管理技巧1. 內存優化實踐2. 避免內存泄漏四、接口測試與監控1. 性能測試2. 日志與監控3. 錯誤處理與限流五、代碼示例&#xff08;Flask 流式處理&#xff09;六、部署建議一、接口設計原…

【實時Linux實戰系列】實時數據流的網絡傳輸

在實時系統中&#xff0c;數據流的實時傳輸是許多應用場景的核心需求之一。無論是工業自動化中的傳感器數據、金融交易中的高頻數據&#xff0c;還是多媒體應用中的視頻流&#xff0c;都需要在嚴格的時間約束內完成數據的傳輸。實時數據流的傳輸不僅要求高吞吐量&#xff0c;還…

C#數組(一維數組、多維數組、交錯數組、參數數組)

在 C# 中&#xff0c;數組是一種用于存儲固定大小的相同類型元素的集合。數組可以包含值類型、引用類型或對象類型的元素&#xff0c;并且在內存中是連續存儲的。以下是關于 C# 數組的詳細介紹&#xff1a;1. 一維數組聲明與初始化// 聲明數組 int[] numbers; // 聲…

Dify離線安裝包-集成全部插件、模板和依賴組件,方便安可內網使用

項目介紹 Dify一鍵離線安裝包&#xff0c;集成安裝了全部插件、模板&#xff0c;并集成了dify全部插件所需的依賴組件。方便你在內網、安可環境等離線狀態下使用。 Dify是一個開源的LLM應用開發平臺。其直觀的界面結合了AI工作流、RAG管道、Agent、模型管理、可觀測性功能等&…

面試150 翻轉二叉樹

思路 采用先序遍歷&#xff0c;可以通過新建根節點node&#xff0c;將原來root的右子樹連到去node的左子樹中&#xff0c;root的左子樹連到去node的右子樹中。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): …

C++-linux系統編程 3.gcc編譯工具

GCC編譯工具鏈完全指南 GCC&#xff08;GNU Compiler Collection&#xff09;是Linux系統下最常用的編譯器套件&#xff0c;支持C、C、Objective-C等多種編程語言。本章將深入講解GCC的編譯流程、常用選項及項目實戰技巧。 一、GCC編譯的四個核心階段 GCC編譯一個程序需要經過四…

uView UI 組件大全

uView UI 是一個基于 uni-app 的高質量 UI 組件庫&#xff0c;提供豐富的跨平臺組件&#xff08;支持 H5、小程序、App 等&#xff09;。以下是其核心組件的分類大全及功能說明&#xff0c;結合最新版本&#xff08;1.2.10&#xff09;整理&#xff1a; &#x1f4e6; 一、基礎…

QWidget 和 QML 的本質和使用上的區別

QWidget 和 QML 是 Qt 框架中兩種不同的 UI 開發技術&#xff0c;它們在底層實現、設計理念和使用場景上有顯著區別。以下是它們的本質和主要差異&#xff1a;1. 本質區別特性QWidgetQML (Qt Modeling Language)技術基礎基于 C 的面向對象控件庫基于聲明式語言&#xff08;類似…

中轉模型服務的風險

最近發現一些 AI 相關帖子下&#xff0c;存在低質 claude code 中轉的小廣告。 其中轉的基本原理就是 claude code 允許自己提供 API endpoint 和 key&#xff0c;可以使用任意一個 OpenAI API 兼容的供應商&#xff0c;就這么簡單。 進一點 claude token&#xff0c;再混入一點…

前端Vue.js面試題(3)

???目錄 1.v-model的原理是什么樣的&#xff1f; 2.Vue的生命周期&#xff1f; 3.Vue子組件和父組件執行順序&#xff1f; 4.created和mounted的區別&#xff1f; 5.vue中&#xff0c;推薦在哪個生命周期發起請求&#xff1f; 6.keep-alive中的生命周期有哪些&#xf…

leetcode:HJ18 識別有效的IP地址和掩碼并進行分類統計[華為機考][字符串]

學習要點 bitset<8>ostringstreamstoistring.findstring.substr 題目鏈接 識別有效的IP地址和掩碼并進行分類統計_牛客題霸_牛客網 題目描述 解法 #include <iostream> #include <bits/stdc.h> #include <sstream> #include <string> #inclu…

JavaEE Tomcat

企業開發介紹 JavaEE 規范 JavaEE規范是J2EE規范的新名稱,早期被稱為 J2EE 規范,其全稱是 Java 2 Platform Enterprise Edition,是由 SUN 公司領導、各廠家共同制定并得到廣泛認可的工業標準(JCP 組織成員)。 其中,JCP 組織(官網)的全稱是 Java Community Process,…

什么是神經網絡,常用的神經網絡,如何訓練一個神經網絡

神經網絡&#xff1a;是深度學習的核心技術。模仿生物神經元工作方式的計算模型&#xff0c;由大量互相連接是神經元組成&#xff0c;通過數據學習復雜的模式和關系。1、神經網絡基本組成&#xff1a;神經元、層、連接神經元神經網絡的最小單元。每個神經元接受輸入&#xff0c…

BigFoot Decursive 2.7.28 2025.07.11

插件顯示為獨立插件&#xff0c;之前是團隊框架自帶 BigFoot Decursive lua-CSDN博客 /decursive 命令打開插件 /DCRSHOW 打開設置列表 然后優先列表里面再點【p】添加&#xff0c;你要驅散得優先職業 一鍵驅散lua插件下載&#xff1a; https://download.csdn.net/downloa…

可穿戴智能硬件在國家安全領域的應用

可穿戴智能硬件在國家安全領域具有廣泛應用&#xff0c;涵蓋軍事作戰、安防監控、邊境巡邏等多個方面&#xff0c;以下是具體介紹&#xff1a;軍事作戰與訓練&#xff1a;戰場態勢感知&#xff1a;士兵佩戴集成多種傳感器的智能頭盔、智能背心等&#xff0c;可實時獲取戰場環境…

后端接口通用返回格式與異常處理實現

前言 目前大部分系統都是前后端分離架構&#xff0c;后端提供接口并返回 JSON 數據&#xff0c;前端接收數據后進行處理展示。為了提高前后端協作效率&#xff0c;后端接口返回值采用固定格式十分必要。 后端接口返回值通用格式 通用返回值通常包含 4 個核心字段&#xff0c…

【yolo】模型訓練參數解讀

在YOLO&#xff08;You Only Look Once&#xff09;目標檢測模型的訓練過程中&#xff0c;數據增強是一項至關重要且極具“藝術性”的技術。它通過對訓練圖像進行一系列隨機變換&#xff0c;人為地創造出更多樣化的訓練樣本&#xff0c;從而有效提升模型的泛化能力、魯棒性&…

IPsec:網絡層的加密盾牌與HTTPS的差異解析

??一、IPsec核心原理??1. 安全封裝結構?┌───────────────┬────────────────┬──────────────────────┐ │ IP頭部 │ IPSec頭部 │ 加密/認證的載荷 │ │ (路由尋址) │ (AH/ESP) │…