三數之和 Java版

題目描述:給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 請你找出所有和為 0 且不重復的三元組。
注意:答案中不可以包含重復的三元組。

輸入:nums = [-1,0,1,2,-1,-4]
輸出:[[-1,-1,2],[-1,0,1]]

輸入:nums = []
輸出:[]

輸入:nums = [0]
輸出:[]

第一步:可以對已有的數組作一個排序,保證數組升序排序,由左至右逐漸增大。為了后續操作做準備。
第二步:創建左右兩個指針,循環數組,將i的位置的值,當作是我們自己,左右指針分別指向兩個隊友(兩個數)。
第三步:每一次都做驗證,三個值相加,看一下三個值相加的結果到底是大了還是小了。
第四步:移動指針,由于目前數組已經有序了,如果值大于0 則大的數小一些即可,右指針左移,反之小于0左指針右移

 public List<List<Integer>> threeSum2(int[] nums) {int n = nums.length;List<List<Integer>> result = new ArrayList<>();Arrays.sort(nums);for (int i = 0; i < n; i++) {if (nums[i] > 0) break;if (i > 0 && nums[i] == nums[i - 1]) continue;  int leftPoint = i + 1;  int rightPoint = n - 1; // 右指針為n-1 就是循環完全部數組while (leftPoint < rightPoint) {int num = nums[i] + nums[leftPoint] + nums[rightPoint];if (num == 0) {result.add(Arrays.asList(nums[i], nums[leftPoint], nums[rightPoint]));   leftPoint++;rightPoint--;   while (leftPoint < rightPoint && nums[leftPoint] == nums[leftPoint - 1]) leftPoint++;while (leftPoint < rightPoint && nums[rightPoint] == nums[rightPoint + 1]) rightPoint--;} else if (num < 0)leftPoint++;elserightPoint--;}}return result;
}

復雜度分析
我們程序中使用了一個for循環加若干個while,但是我們會發現while循環的整體次數 其實就是n的次數,所以時間復雜度應該是O(N)。
空間復雜度:只使用了幾個固定的值,如n,左指針,右指針等 所以空間復雜度是O(1)

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

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

相關文章

“土味出海”,屢試不爽!短劇出海引來新一輪爆發?

土味和“錢途”并存的短劇不僅在國內迅猛爆發&#xff0c;今年下半年以來海外市場多部爆火短劇出現&#xff0c;“短劇出海”的話題熱度不斷攀升&#xff0c;絲毫不差2021年網文出海的盛況。 “霸總的愛&#xff0c;日入千萬刀”&#xff0c;是真實存在的&#xff01; 據統計…

tp8 使用rabbitMQ(1)簡單隊列

php8.0 使用 rabbitmq 要使用 3.6版本以上的&#xff0c; 并且還要開啟 php.ini中的 socket 擴展 php think make:command SimpleMQProduce //創建一個生產者命令行 php think make:command SimpleMQConsumer //創建一個消費者命令行 代碼中的消息持久化的說明 RabbitMQ 消息持…

#Js篇:var、let和 const

var 聲明的變量具有函數作用域或者全局作用域&#xff1b;存在變量提升&#xff0c;即在執行上下文中&#xff0c;變量會被提升到函數或全局作用域的頂部&#xff0c;但初始化的賦值不會提升&#xff1b;可以重復聲明同一個變量不會報錯&#xff1b;可以被重新賦值&#xff1b…

vue3 + Ant Design Vue國際化,組件默認顯示中文

官網 寫入App.vue <template><ConfigProvider :locale"zhCN"><router-view :key"$route.fullPath"></router-view></ConfigProvider> </template><script setup> import { ConfigProvider } from "ant-de…

某上市證券公司:管控文件交換行為 保護核心數據資產

客戶簡介 某上市證券公司成立于2001年&#xff0c;經營范圍包括&#xff1a;證券經紀、證券投資咨詢、證券承銷與保薦、證券自營等。經過多年發展&#xff0c;在北京、上海、深圳、重慶、杭州、廈門等國內主要中心城市及甘肅省內各地市設立了15家分公司和80余家證券營業部。20…

軟文推廣中如何提煉好產品賣點,媒介盒子分享

內容同質化的時代下&#xff0c;企業應該如何讓用戶留下印象&#xff0c;并且成功將產品賣出去&#xff0c;核心思維就在于提煉產品賣點&#xff0c;產品賣點是銷量提升的關鍵&#xff0c;相信企業在推廣產品時都會有點困惑&#xff0c;感覺自家產品和競品比起來只是logo、外觀…

壓縮與解壓縮

核心接口 Compressor package com.xxx.arch.mw.nbp.common.csp;import com.xxx.arch.mw.nbp.common.constant.CommonConstants; import com.xxx.arch.mw.nbp.common.exception.NbpException;import static com.xxx.arch.mw.nbp.common.csp.CompressorEnum.ZSTD;/*** */ publi…

【mybatis】使用<foreach>報錯parameter ‘id‘ not found

程序其他sql都執行正常&#xff0c;也寫了param注解&#xff0c;但是還是一直報parameter ‘id’ not found。最后發現是調用sql的實現類里ids的入參對象名稱不叫ids&#xff0c;叫idList 代碼如下&#xff1a; List<Map<String,String>> resultmapper.sql(date,…

【攻防世界-misc】pure_color

1.方法一&#xff1a;用畫圖工具打開圖片&#xff0c;將圖片拷貝至虛擬機win7桌面&#xff0c; 點“屬性”&#xff0c;顏色設置為“黑白”&#xff0c; 出現flag值。 2.方法二&#xff1a;使用Stegsilve打開&#xff0c;分析圖片 將圖片打開&#xff0c;按左右鍵查找&#xff…

c#數據庫:vs2022 加入mysql數據源

網上有VS2019連接MySQL數據庫的&#xff0c;那么VS2022&#xff0c;VS2023如果和連接到mysql數據庫呢&#xff0c;這里總結一下我的經歷&#xff1a; 1、首先下載ODBC驅動安裝包 當前下載地址&#xff1a;https://dev.mysql.com/downloads/connector/odbc/ 2、ODBC安裝 下載完…

openGauss學習筆記-131 openGauss 數據庫運維-啟停openGauss

文章目錄 openGauss學習筆記-131 openGauss 數據庫運維-啟停openGauss131.1 啟動openGauss131.2 停止openGauss131.3 示例131.3.1 啟動openGauss131.3.2 停止openGauss 131.4 錯誤排查 openGauss學習筆記-131 openGauss 數據庫運維-啟停openGauss 131.1 啟動openGauss 以操作系…

【ChatGLM3-6B】Docker下快速部署

【ChatGLM2-6B】小白入門及Docker下部署 前提下載安裝包網盤地址 開始安裝加載鏡像啟動鏡像進入容器啟動模型交互頁面訪問頁面地址 前提 安裝好了docker安裝好了NVIDIA顯卡16G 下載安裝包 網盤地址 ? 這里因為網盤上傳文件有大小限制&#xff0c;所以使用了分卷壓縮的方式…

【深度學習】CNN中pooling層的作用

1、pooling是在卷積網絡&#xff08;CNN&#xff09;中一般在卷積層&#xff08;conv&#xff09;之后使用的特征提取層&#xff0c;使用pooling技術將卷積層后得到的小鄰域內的特征點整合得到新的特征。一方面防止無用參數增加時間復雜度&#xff0c;一方面增加了特征的整合度…

MySql數據庫常用指令(一)

MySql數據庫常用指令&#xff08;一&#xff09; 一、MySQL 創建數據庫二、MySQL 刪除數據庫三、選擇數據庫四、選擇數據庫五、創建數據表六、刪除數據表七、插入數據八、查詢數據 注&#xff1a;文中TEST為測試所用數據庫&#xff0c;根據實際應用修改 一、MySQL 創建數據庫 …

JVM中如何實現垃圾收集

Java虛擬機&#xff08;JVM&#xff09;使用垃圾收集器&#xff08;Garbage Collector&#xff09;來管理內存&#xff0c;清理不再使用的對象以釋放內存空間。垃圾收集的主要目標是自動化內存管理&#xff0c;使開發人員無需顯式地釋放不再使用的內存&#xff0c;從而降低了內…

Mysql面經

Select語句的執行順序 1、from 子句組裝來自不同數據源的數據&#xff1b; 2、where 子句基于指定的條件對記錄行進行篩選&#xff1b; 3、group by 子句將數據劃分為多個分組&#xff1b; 4、使用聚集函數進行計算&#xff1b;AVG() SUM() MAX() MIN() COUNT() 5、使用 havin…

Vue模板引用

Vue的模板引用是為了處理直接訪問DOM底層而做的補充處理&#xff0c;畢竟Vue宣稱是基于組件的&#xff0c;這種補充處理是對Vue框架的補充。在前端基于BOMDOMjs的組成來看&#xff0c;Vue保留模板引用是留下了一種框架設計的余裕。 模板引用案例如下&#xff1a; <script s…

2016年8月18日 Go生態洞察:Go 1.7版本二進制文件縮小

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

【經驗分享】在vm中安裝openEuler及使用yum安裝openGauss

1.前言 隨著互聯網時代對數據庫的新要求,以PostgreSQL為基礎的開源數據庫openGauss應運而生。openGauss在保持PostgreSQL接口兼容的前提下,對其查詢優化器、高可用特性等進行了全面優化,實現了超高性能。 同時,openGauss作為社區項目,新增功能持續豐富。優點是查詢性能高、可…

機器學習——詞向量模型(CBOW代碼實現-未開始)

本來是不打算做這個CBOW代碼案例的&#xff0c;想快馬加鞭看看前饋神經網絡 畢竟書都買好了 可是…可是…我看書的時候&#xff0c;感覺有點兒困難&#xff0c;哭的很大聲… 感覺自己腦細胞可能無法這么快接受 要不&#xff0c;還是退而求個稍微難度沒那么大的事&#xff0c;想…