四數之和java版

題目描述

給定一個包含 n 個整數的數組 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重復的四元組。
注意:答案中不可以包含重復的四元組。
題目示例
題意:
這道題是求四個數的和相加等于目標值,然后要把重復的值去掉。
這個題的思路和力扣15-三數之和的思路類似,三數之和是固定一個數,其余進行雙指針。四數之和是固定兩個數,其余進行雙指針。

解題思路:

參考官方題解

排序+雙指針:先給數組nums進行升序排序,兩個for循環確定前兩個數,然后使用雙指針確定后兩個數,需要考慮以下幾種情況進行剪枝:

在確定第一個數之后,如果nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target ,代表第一個數與之鄰進的三個最小數之和都大于目標值了,則說明后面剩下的三個數無論取什么值,四數之和一定大于target,則需要退出第一輪循環;
在確定第一個數之后,如果nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target ,代表第一個數與數組中的三個最大數之和都小于目標值了,則說明后面剩下的三個數無論取什么值,四數之和一定小于target,則需要進入下一輪循環,枚舉nums[i+1];
在確定前兩個數之后,如果nums[i] + nums[j] + nums[j+1] + nums[j+2] > target ,說明剩下的兩個數,無論取什么值,四個數之和一定會大于taret,因此退出第二層循環;
在確定前兩個數之后,如果nums[i] + nums[j] + nums[n-2] + nums[n-1] < target ,說明剩下的兩個數,無論取什么值,四個數之和一定會小于taret,因此進入下一輪,枚舉nums[j+1];
使用雙指針:左右指針分別指向下標 j+1和下標 n-1。每次計算四個數的和sum,并進行如下操作:

如果和 sum == target,則將枚舉到的四個數加到答案中,然后將左指針右移直到遇到不同的數,將右指針左移直到遇到不同的數;

如果和sum < target,則將左指針右移一位;

如果和sum > target,則將右指針左移一位。

public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> res = new ArrayList<List<Integer>>();int n = nums.length;//如果數組的長度小于4if(n < 4) return res;//對數組進行排序Arrays.sort(nums);//第一個數,只能遍歷到倒數第4位for(int i = 0; i < n-3; i++){//:先去掉重復值if(i > 0 && nums[i] == nums[i-1]) continue;//如果鄰近的四個數大于target,則退出if((long)nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target) break;//如果與最大的三個數相加小于target,則說明nums[i]小了,需要進入新一輪循環if((long)nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target) continue;//確定第二個數for(int j = i+1; j < n-2; j++){
//去重if(j > i + 1 && nums[j] == nums[j - 1]) continue;if((long)nums[i] + nums[j] + nums[j+1] + nums[j+2] > target) break;if((long)nums[i] + nums[j] + nums[n-2] + nums[n-1] < target) continue;//確定了兩個數之后,后兩個數使用雙指針int L = j + 1;int R = n - 1;while(L < R){int sum = nums[i] + nums[j] + nums[L] + nums[R];if(sum == target){res.add(Arrays.asList(nums[i], nums[j], nums[L], nums[R]));//跳過重復數while(L < R && nums[L] == nums[L + 1]) L++;while(L < R && nums[R] == nums[R - 1]) R--;L++;R--;}else if(sum < target){L++;}else{R--;}}}}return res;}

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

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

相關文章

物流實時數倉:數倉搭建(ODS)

系列文章目錄 物流實時數倉&#xff1a;采集通道搭建 物流實時數倉&#xff1a;數倉搭建 文章目錄 系列文章目錄前言一、IDEA環境準備1.pom.xml2.目錄創建 二、代碼編寫1.log4j.properties2.CreateEnvUtil.java3.KafkaUtil.java4.OdsApp.java 三、代碼測試總結 前言 現在我們…

信息系統項目管理師-質量管理論文提綱

快速導航 1.信息系統項目管理師-項目整合管理 2.信息系統項目管理師-項目范圍管理 3.信息系統項目管理師-項目進度管理 4.信息系統項目管理師-項目成本管理 5.信息系統項目管理師-項目質量管理 6.信息系統項目管理師-項目資源管理 7.信息系統項目管理師-項目溝通管理 8.信息系…

當內容創作進入 AGI 時代,你也可以成為「神筆馬良」

我神筆馬良的童話故事我們或多或少都聽過&#xff0c;一支神筆在手&#xff0c;想畫什么就能畫出什么&#xff0c;栩栩如生。創造者的理解力、想象力和創作力都能通過這支神筆釋放。 近一年&#xff0c;隨著 AIGC 內容生產工具的快速出圈&#xff0c;有人把 Stable Diffusion、…

Sublime Text 4168最新代碼編輯

Sublime Text是一款功能強大的文本編輯器&#xff0c;具有以下主要功能&#xff1a; 支持多種編程語言的語法高亮和代碼自動完成功能&#xff0c;包括Python、JavaScript、HTML、CSS等。提供代碼片段&#xff08;Snippet&#xff09;功能&#xff0c;可以將常用的代碼片段保存…

JSP EL 算數運算符邏輯運算符

除了 empty 我們這邊還有一些基本的運算符 第一種 等等于 jsp代碼如下 <% page contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %> <%request.setCharacterEncoding("UTF-8");%> <!DOCTYPE html> <html> …

JVM-基礎

jdk7及以前&#xff1a; 通過-XX:PermSize 來設置永久代初始分配空間&#xff0c;默認值是20.75m -XX:MaxPermSize來設定永久代最大可分配空間&#xff0c;32位是64m&#xff0c;64位是82m jdk8及之后&#xff1a; 通過-XX:MetaspaceSize 來設置永久代初始分配空間&#xff…

概要設計文檔案例分享

1引言 1.1編寫目的 1.2項目背景 1.3參考資料 2系統總體設計 2.1整體架構 2.2整體功能架構 2.3整體技術架構 2.4運行環境設計 2.5設計目標 3系統功能模塊設計 3.1個人辦公 4性能設計 4.1響應時間 4.2并發用戶數 5接口設計 5.1接口設計原則 5.2接口實現方式 6運行設計 6.1運行模塊…

GZ031 應用軟件系統開發賽題第4套

2023年全國職業院校技能大賽 應用軟件系統開發賽項&#xff08;高職組&#xff09; 賽題第4套 工位號&#xff1a; 2023年4月 競賽說明 一、項目背景 黨的二十大報告指出&#xff0c;要加快建設制造強國、數字中國&#xff0c;推動制造業高端化、智能化、…

骨傳導耳機的優缺點都有哪些?骨傳導耳機值得入手嗎?

骨傳導耳機的優點還是很多的&#xff0c;相比于傳統耳機&#xff0c;骨傳導耳機要更值得入手&#xff01; 下面讓我們了解下骨傳導耳機的優缺點都有哪些&#xff1a; 一、優點 1、使用更安全 傳統的耳機&#xff0c;在使用時會聽不到外界的聲音&#xff0c;而骨傳導耳機通過…

“java.lang.IllegalStateException: No ConfigurableListableBeanFactory set“,缺少配置

一、錯誤分析 做品優購項目的運營商安全登錄時&#xff0c;運行項目后&#xff0c;瀏覽器訪問模板頁&#xff0c;模板頁的表格無法正常顯示&#xff0c;報錯信息如下&#xff1a; SEVERE: StandardWrapper.Throwable java.lang.IllegalStateException: No ConfigurableLista…

Java視頻流處理技術分享

引言 在現代互聯網時代&#xff0c;視頻流處理成為了許多應用的重要組成部分。無論是實時視頻聊天、在線直播還是視頻會議&#xff0c;都需要高效的視頻流處理技術來保證用戶體驗。Java作為一種強大的編程語言&#xff0c;也在視頻流處理領域發揮著重要的作用。本文將深入探討…

Linux 6.7全面改進x86 CPU微碼加載方式

導讀最近&#xff0c;社區在清理 Linux 上的 Intel/AMD x86 CPU 微代碼加載方面做了大量的工作&#xff0c;這些工作現已合并到 Linux 6.7 中。 由于在啟動時加載 CPU 微代碼對于減少不斷出現的新 CPU 安全漏洞以及有時解決功能問題非常重要&#xff0c;Thomas Gleixner 最近開…

AGV調整Matlab實現

% 用二維數組代替地圖和場地信息 % 可用場地&#xff1a;0 % 小車本身&#xff1a;1 % 貨物點及入庫點&#xff1a;2 % 地圖邊界: 100 % AGV出發區&#xff1a;11 % 監測區&#xff1a;12 % 充電區&#xff1a;13 % 生產區A1、A2&#xff1a;14 % 生產區B3、B4、B5&#xff1a…

C百題--7.輸出乘法表

1.問題描述 輸出9*9乘法表 2.解決思路 利用99乘法表行和列之間的關系&#xff0c;進行輸出 注意&#xff1a;%-2d 2代表占兩個字符&#xff1b;-代表左對齊 3.代碼實現 #include<stdio.h> int main(){for(int i1;i<9;i){for(int j1;j<i;j){printf("%d*%d…

微信小程序埋點

使用如下代碼封裝一下&#xff0c;例如封裝在log.js文件里面&#xff1a; var log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.info.apply(l…

深入學習pytorch筆記

兩個重要的函數 dir()&#xff1a; 一個內置函數&#xff0c;用于列出對象的所有屬性和方法 help()&#xff1a;一個內置函數&#xff0c;用于獲取關于Python對象、模塊、函數、類等的詳細信息 Dateset類 Dataset&#xff1a;pytorch中的一個類&#xff0c;開發者在訓練和…

抖音電商品牌力不足咋辦?如何升級或強開旗艦店、官方旗艦店?我們有妙招!

隨著抖音電商的發展&#xff0c;越來越多的商家蜂擁而至&#xff0c;入駐經營抖音小店... 然而我們在開店的時候&#xff0c;選擇開通官方旗艦店、旗艦店、專營店或專賣店&#xff0c;卻被系統提示為你的商標品牌力不足&#xff0c;無法開通官方旗艦店、旗艦店、專營店、專賣店…

Android手電筒、閃光燈、torch、flash

1. 僅開啟手電筒 單純的開啟手電筒我們可以使用CameraManager的.setTorchMode()方法。 cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)獲取該相機特征是否可獲取閃光燈。 CameraManager cameraManager (CameraManager) getSystemService(CAMERA_SE…

在 vscode 中的json文件寫注釋,不報錯的解決辦法

打開 vscode 的「設置」&#xff0c;搜索&#xff1a;files: associations&#xff0c;然后添加 *.json jsonc最后

Nginx 配置錯誤導致的漏洞

目錄 1. CRLF注入漏洞 Bottle HTTP頭注入漏洞 2.目錄穿越漏洞 3. http add_header被覆蓋 本篇要復現的漏洞實驗有一個網站直接為我們提供了Docker的環境&#xff0c;我們只需要下載下來就可以使用&#xff1a; Docker環境的安裝可以參考&#xff1a;Docker安裝 漏洞環境的…