力扣hot100——三數之和(雙指針)

題目:三數之和
排序 + 雙指針
本題的難點在于如何去除重復解。
算法流程:
1、特判,對于數組長度 n,如果數組為 null 或者數組長度小于 3,返回 []2、對數組進行排序。
3、遍歷排序后數組:
(1)若 nums[i]>0:因為已經排序好,所以后面不可能有三個數加和等于 0,直接返回結果。
(2)對于重復元素:跳過,避免出現重復解
(3)令左指針 L=i+1,右指針 R=n?1,當 L<R 時,執行循環:
當 nums[i]+nums[L]+nums[R]==0,執行循環,判斷左界和右界是否和下一位置重復,去除重復解。并同時將 L,R 移到下一位置,尋找新的解
若和大于 0,說明 nums[R] 太大,R 左移
若和小于 0,說明 nums[L] 太小,L 右移作者:吳彥祖
鏈接:https://leetcode.cn/problems/3sum/solutions/39722/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
代碼實現:
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//特判,對于數組長度 n,如果數組為 null 或者數組長度小于 3,返回空數組if(nums.size()<3){return vector<vector<int>>();}int l,r;vector<vector<int>> result; //對數組進行排序。sort(nums.begin(), nums.end());for (int i = 0; i< nums.size(); i++){l=i+1;r = nums.size()-1;//若 nums[i]>0:因為已經排序好,所以后面不可能有三個數加和等于 0,直接返回結果。if (nums[i]>0){return result;}//難點:對于重復元素:跳過,避免出現重復解if (i>0 && nums[i] == nums[i-1]){continue;}while(r>l){if ((nums[i]+nums[l]+nums[r]) > 0){r--;}else if((nums[i]+nums[l]+nums[r]) < 0){l++;}else{vector<int> group;group.push_back(nums[i]);group.push_back(nums[l]);group.push_back(nums[r]);result.push_back(group);//去重第三個元素while(r>l && nums[r]==nums[r-1])r--;//去重第二個元素while(r>l && nums[l]==nums[l+1])l++;   r--;l++;}}   }return result;}
};

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

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

相關文章

操作系統為ubantu的服務器上部署nginx軟件基礎步驟總結

今天在這里&#xff0c;我們總結一下ubantu的服務器上部署nginx軟件&#xff0c;請按照以下步驟進行安裝&#xff1a; 1、更新包列表&#xff1a; 首先更新你系統中的可用軟件包列表&#xff0c;以確保你可以安裝最新版本。 sudo apt update2、 Ubuntu上更新已安裝軟件包&…

記錄一次,rabbitmq開啟stomp插件之后,還是連不上15674端口的問題

原因是裝在docker 里面的rabbitmq 沒有映射15674端口&#xff0c;需重新刪除容器之后重新運行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本號 進入docker容器開啟插件 docker exec -it rabbitm…

MATLAB 控制系統設計與仿真 - 27

狀態空間的標準型 傳遞函數和狀態空間可以相互轉換&#xff0c;接下來會舉例如何有傳遞函數轉成狀態空間標準型。 對角標準型 當 G(s)可以寫成&#xff1a; 即&#xff1a; 根據上圖可知&#xff1a; 約當標準型 當 G(s)可以寫成&#xff1a; 即&#xff1a; 根據上圖…

1.FastAPI簡介與安裝

文章目錄 為什么選擇FastAPI&#xff1f;FastAPI支持的功能FastAPI的安裝第一個FastAPI應用運行應用 為什么選擇FastAPI&#xff1f; python web開發: Django: 適合大型復雜項目&#xff1b;Flask&#xff1a;適合靈活開發&#xff0c;搭建小型項目&#xff1b;FastAPI: 兼具開…

【MyDB】一個仿照MySQL的輪子項目系列文章匯總

迄今所有系列文章內容如下&#xff1a; 代碼位于xianghua-2/MYDB: 一個仿MySQL的簡易數據庫 1 項目環境配置以及整體項目結構 【MyDB】1-MyDB環境配置及項目結構-CSDN博客 2 TransactionManager事務管理模塊 【MyDB】2-TransactionManager 事務管理-CSDN博客 3 DataManage…

2025年汽車加氣站操作工考試精選題庫

汽車加氣站操作工題庫中題目及答案&#xff1a; 單項選擇題 1、按壓力容器的設計壓力分為&#xff08; &#xff09;個壓力等級。 A. 3 B. 4 C. 5 答案&#xff1a;B 2、緩沖罐的安裝位置在天然氣壓縮機&#xff08; &#xff09;。 A. 前 B. 后 C. 中間 答案&#…

【Unity Bug 隨記】使用Rider debug功能時Unity Reload Domain卡死問題

使用Rider debug功能時Unity Reload Domain卡死 檢查是否使用unity version control版本控制系統&#xff08;VCS&#xff09;&#xff0c;使用的話刪除這個包&#xff0c;再嘗試&#xff0c;如果能正常斷點調試&#xff0c;說明確實是VCS的問題。 我和幾個網友都是這個原因…

麒麟銀河V10服務器RabbitMQ安裝

安裝步驟 rabbitMQ依賴于erlang的環境&#xff0c;所以需要先安裝erlang&#xff0c;erlang跟rabbitMQ是有版本之間的關聯關系的&#xff0c;根據對應的版本去安裝下載&#xff0c;保證少出問題。 可以通過官網來查看RabbitMQ和erlang之間的版本對應關系 rabbitMQ和erlang之間…

springboot操作redis集群,注意事項

整合redis可查看博文 springboot 整合redis_springboot整合redis csdn-CSDN博客 集群中操作注意事項 1 多鍵操作失敗&#xff1a; 當使用multiGet等需要同時訪問多個鍵的方法時&#xff0c;如果沒有使用Hash Tags&#xff0c;這些鍵可能會被分配到不同的槽中。如果這些槽位于…

優選算法訓練篇07--力扣LCR179.查找總價格為目標值的兩個商品

目錄 1.題目鏈接&#xff1a;LCR179.查找總價格為目標值的兩個商品 2.題目描述&#xff1a; 3.解法一(暴力解法&#xff0c;會超時)&#xff1a; 4.解法二(雙指針-對撞指針): 1.題目鏈接&#xff1a;LCR179.查找總價格為目標值的兩個商品 2.題目描述&#xff1a; 購物車…

KMP-子串匹配算法-關鍵點理解

1.理解next[]數組的使用與來歷 2.求解next[]數組 一、kmp算法的原理 首先觀察暴力解法&#xff1a;假設主串為&#xff1a;abdxxabc&#xff0c;模式串為abxxabd。 暴力解法&#xff0c;就是對主串每個字符作為第一個字符&#xff0c;開始和模式串比較。 比如&#xff1a;從…

Flutter 學習之旅 之 flutter 使用 SQLite(sqflite) 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在 的簡單封裝

Flutter 學習之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在 的簡單封裝 目錄 Flutter 學習之旅 之 flutter 使用 SQLite&#xff08;sqflite&#xff09; 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在…

群體智能優化算法-粒子群優化算法(Particle Swarm Optimization, PSO,含Matlab源代碼)

摘要&#xff08;Abstract&#xff09; 粒子群優化&#xff08;PSO&#xff09;是一種基于群體智能的優化算法&#xff0c;受鳥群覓食行為的啟發。PSO 通過模擬粒子&#xff08;個體&#xff09;在搜索空間中的運動來尋找最優解。每個粒子根據自身的歷史最優位置&#xff08;p…

Redis 在windows下的下載安裝與配置

參考鏈接:https://developer.aliyun.com/article/1395346 下載 Redis 訪問 Redis 下載地址&#xff1a;https://github.com/tporadowski/redis/releases 下載 Redis 時&#xff0c;你可以選擇 ZIP 包或 MSI 安裝&#xff1a; ZIP包&#xff1a;需要手動解壓、初始化、配置和…

UE5材質法線強度控制節點FlattenNormal

連法 FlattenNormal內部是這樣的 FlattenNormal的作用是用來調整法線強度 連上FlattenNormal后 拉高數值

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;來自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在為開發者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 組織內&#xff0c;我們一直致力于優化向量數據庫的性能。我們的使命是讓 Lucen…

Android 13深度定制:SystemUI狀態欄時間居中顯示終極實戰指南

一、架構設計與技術解析 1. SystemUI狀態欄核心布局機制 層級結構 mermaid 復制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…

ArcGIS10.X影像智能下載!遷移ArcGIS Pro批量智能高清影像下載工具至ArcGIS!

上周我們分享了 我寫的一個ArcGIS Pro版批量下載高清影像&#xff08;谷歌、天地圖、ESRI等&#xff09;工具給大家&#xff0c;Deepseek我&#xff01;寫一個ArcGIS Pro批量下載高清影像&#xff08;谷歌、天地圖、ESRI等&#xff09;工具給大家-CSDN博客文章瀏覽閱讀130次。深…

前端面經分享(25/03/19)

北京一家做協同辦公軟件出海的公司&#xff0c;技術一面&#xff0c;20k-40k&#xff0c;要求3-5年 詳細聊了一下上家公司的項目上家公司的項目是不做了嗎&#xff0c;離職原因是什么&#xff0c;你覺得公司的這個產品怎么樣在做AI類的業務時&#xff0c;作為前端感覺跟常規業務…

7 款可視化爬蟲工具全解析:案例示范與操作指南

目錄 1. ParseHub 2.WebHarvy 3.DataMiner 4.Dexi.io 5.ContentGrabber 6.Portia 7.UiPath 文檔聚焦 7 款熱門可視化爬蟲工具&#xff0c;突出簡便的可視化操作&#xff0c;簡單拖拽、設置&#xff0c;無需編程知識&#xff0c;人人皆可上手。 1. ParseHub ParseHub 是一…