day30【LeetCode力扣】18.四數之和

day30【LeetCode力扣】18.四數之和

1.題目描述

給你一個由 n 個整數組成的數組 nums ,和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] (若兩個四元組元素一一對應,則認為兩個四元組重復):

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按 任意順序 返回答案 。

示例 1:

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

示例 2:

輸入:nums = [2,2,2,2,2], target = 8
輸出:[[2,2,2,2]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

2.題解

2.1 c++ 【排序+雙指針】
class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> res;sort(nums.begin(),nums.end());int length = nums.size();for(int i=0; i<length;i++){if(nums[i]>target&&target>0)break;if(i>0&&nums[i]==nums[i-1])continue;for(int j=i+1;j<length;j++){if(nums[i]+nums[j]>target&&target>0)break;if(j>i+1&&nums[j]==nums[j-1])continue;int left=j+1;int right=length-1;while(left<right){// long long s = static_cast<long long>(nums[i]) + nums[j] + nums[left] + nums[right];long s = (long)(nums[i]) + nums[j] + nums[left] + nums[right];if(s==target){res.push_back(vector<int>{nums[i],nums[j],nums[left],nums[right]});while(left<right&&nums[left]==nums[left+1])left++;while(left<right&&nums[right]==nums[right-1])right--;left++;right--;}else if(s<target)left++;elseright--;}}}return res;}
};
2.2 python【排序+雙指針】
class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums.sort()n = len(nums)res = []for i in range(n):if nums[i]>target and nums[i]>0 and target >0:breakif i>0 and nums[i]==nums[i-1]:continuefor j in range(i+1,n):if nums[i] + nums[j]>target and target>0:breakif j>i+1 and nums[j]==nums[j-1]:continueleft,right = j+1,n-1while left<right:sums = nums[i]+nums[j]+nums[left]+nums[right]if sums==target:res.append([nums[i],nums[j],nums[left],nums[right]])while left < right and nums[left]==nums[left+1]:left+=1while left < right and nums[right]==nums[right-1]:right-=1left+=1right-=1elif sums<target:left+=1else:right-=1return res
2.3 python【字典】
class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:res_dict = {}for num in nums:res_dict[num]=res_dict.get(num,0)+1ans = set()for i in range(len(nums)):for j in range(i+1,len(nums)):for k in range(j+1,len(nums)):val = target-nums[i]-nums[j]-nums[k]if val in res_dict:count = (nums[i] == val) + (nums[j] == val) + (nums[k] == val)if res_dict[val]>count:ans.add(tuple(sorted([nums[i],nums[j],nums[k],val])))return [list(x) for x in ans]

排序的主要目的是為了避免重復。在這段代碼中,將四個元素 [nums[i], nums[j], nums[k], val] 排序后,可以確保不同順序的相同元素組合被視為同一個組合。這是因為排序后的元組是唯一的,無論元素的原始順序如何。

具體來說,考慮這樣一種情況:假設有兩個四元組 (a, b, c, d)(b, c, a, d),它們的元素相同,但順序不同。如果不排序,它們將被視為不同的項,并且都會被添加到集合 ans 中。而排序后,這兩個四元組都會變成 (a, b, c, d),從而確保集合 ans 中不會有重復的項。


ok了,就到這里叭~~~

? 如果覺得作者寫的不錯,求給博主一個大大的點贊支持一下,你們的支持是我更新的最大動力!

? 如果覺得作者寫的不錯,求給博主一個大大的點贊支持一下,你們的支持是我更新的最大動力!

? 如果覺得作者寫的不錯,求給博主一個大大的點贊支持一下,你們的支持是我更新的最大動力!

成功并不是最終目的,而是持續努力的結果。

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

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

相關文章

Linux: Mysql環境安裝

Mysql環境安裝&#xff08;Centos&#xff09; 前言一、卸載多余環境1.1 卸載mariadb1.2 查看并卸載系統mysql和mariadb安裝包 二、換取mysql官方yum源三、安裝并啟動mysql服務3.1 yum源加載3.2 安裝yum源3.3 安裝mysql服務3.3.1 安裝指令3.3.2 GPG密鑰問題解決方法3.3.3 查看是…

循環結構(一)——for語句【互三互三】

文章目錄 &#x1f341; 引言 &#x1f341; 一、語句格式 &#x1f341; 二、語句執行過程 &#x1f341; 三、語句格式舉例 &#x1f341;四、例題 &#x1f449;【例1】 &#x1f680;示例代碼: &#x1f449;【例2】 【方法1】 &#x1f680;示例代碼: 【方法2】…

【C++ 編程】引用 - 給變量起別名、淺復制

基本語法&#xff1a;數據類型 &別名 原名int a 10; int &b a;引用必須初始化 (? int &b;)&#xff0c;初始化后不可改變 (int c 5; b c&#xff1a;b 沒有變成c的別名&#xff0c;而是 a、b 對應的值變更為了 c 的值)本質是指針常量, 淺復制 【黑馬程序員匠…

Cartographer重入門到精通(二):運行作者demo及自己的數據集

在demo數據包上運行cartographer 現在Cartographer和Cartographer的Ros包已經都安裝好了&#xff0c;你可以下載官方的數據集到指定的目錄&#xff08;比如在Deutsches Museum用背包采集的2D和3D 數據&#xff09;&#xff0c;然后使用roslauch來啟動demo。 注&#xff1a;la…

IO半虛擬化-Virtio學習筆記

參考&#xff1a;《深入淺出DPDK》及大佬們的各種博客 Virtio簡介&運行環境 Virtio 是一種用于虛擬化環境中的半虛擬化 I/O 框架&#xff0c;目的是在虛擬機和主機之間提供一種高效的 I/O 機制。關于什么是半虛擬化和全虛擬化&#xff1a;見SR-IOV學習筆記。 YES&#xf…

PDMS二次開發(二十二)——關于1.0.3.1版本升級內容的說明

目錄 1.更新內容介紹2.效果演示3.關于重構自動添加焊口功能的說明3.1錯誤示例 3.問題交流1.創建焊口提示失敗2.程序崩潰 1.更新內容介紹 在添加焊口之前先清除當前branch已有焊口&#xff1b;顯示清除焊口的個數和添加焊口的個數&#xff1b;重構了自動添加焊口功能&#xff0…

值得關注的數據資產入表

不錯的講解視頻&#xff0c;來自&#xff1a;第122期-杜海博士-《數據資源入表及數據資產化》-大數據百家講壇-廈門大學數據庫實驗室主辦第122期-杜海博士-《數據資源入表及數據資產化》-大數據百家講壇-廈門大學數據庫實驗室主辦-20240708_嗶哩嗶哩_bilibili

《A++ 敏捷開發》- 10 二八原則

團隊成員協作&#xff0c;利用項目數據&#xff0c;分析根本原因&#xff0c;制定糾正措施&#xff0c;并立馬嘗試&#xff0c;判斷是否有效&#xff0c;是改善的“基本功”。10-12章會探索里面的注意事項&#xff0c;13章會看兩家公司的實施情況和常見問題。 如果已經獲得高層…

Linq的常用方法

LINQ&#xff08;Language Integrated Query&#xff09;是.NET Framework中用于數據查詢的組件&#xff0c;它將查詢功能集成到C#等.NET語言中。LINQ提供了豐富的查詢操作符&#xff0c;這些操作符可以應用于各種數據源&#xff0c;如內存中的集合、數據庫、XML等。以下是一些…

java中的String 以及其方法(超詳細!!!)

文章目錄 一、String類型是什么String不可變的原因(經典面試題)String不可變的好處 二、String的常用構造形式1.使用常量串構造2.使用newString對象構造3.字符串數組構造 三、常用方法1. length() 獲取字符串的長度2. charAt() 獲取字符串中指定字符的值 (代碼單元)3. codePoin…

水的幾個科學問題及引發的思考

水的幾個科學問題及引發的思考 兩個相同的容器A和B&#xff0c;分別裝有同質量的水&#xff0c;然后&#xff0c;在A容器中加入水&#xff0c;在B容器中加入冰&#xff0c;如果加入水和冰的質量相同。問&#xff0c;容器B的水位將與容器A的水位相同嗎&#xff08;假設冰未融化時…

Log4j的原理及應用詳解(二)

本系列文章簡介&#xff1a; 在軟件開發的廣闊領域中&#xff0c;日志記錄是一項至關重要的活動。它不僅幫助開發者追蹤程序的執行流程&#xff0c;還在問題排查、性能監控以及用戶行為分析等方面發揮著不可替代的作用。隨著軟件系統的日益復雜&#xff0c;對日志管理的需求也日…

MySQL和SQlServer的區別

MySQL和SQlServer的區別 說明&#xff1a;在一些常用的SQL語句中&#xff0c;MySQL和SQLServer存在有一些區別&#xff0c;后續我也會將我遇到的不同點持續更新在這篇博客中。 1. 獲取當前時間 SQLServer&#xff1a; -- SQLServer -- 1.獲取當前時間 SELECT GETDATE(); --…

Vue2切換圖片小案例

代碼中 v-show "index>0",是表示下標只有大于零時上一頁按鈕才會顯示v-show "index<list.length-1",是表示下標只有小于list數組的最大值才會顯示&#xff0c;反之隱藏。click "index--"和click "index",是點擊按鈕后加減數…

【ZooKeeper學習筆記】

1. ZooKeeper基本概念 Zookeeper官網&#xff1a;https://zookeeper.apache.org/index.html Zookeeper是Apache Hadoop項目中的一個子項目&#xff0c;是一個樹形目錄服務Zookeeper翻譯過來就是動物園管理員&#xff0c;用來管理Hadoop&#xff08;大象&#xff09;、Hive&…

AR0132AT 1/3 英寸 CMOS 數字圖像傳感器可提供百萬像素 HDR 圖像處理(器件編號包含:AR0132AT6R、AR0132AT6C)

AR0132AT 1/3 英寸 CMOS 數字圖像傳感器&#xff0c;帶 1280H x 960V 有效像素陣列。它能在線性或高動態模式下捕捉圖像&#xff0c;且帶有卷簾快門讀取。它包含了多種復雜的攝像功能&#xff0c;如自動曝光控制、開窗&#xff0c;以及視頻和單幀模式。它適用于低光度和高動態范…

QML界面控件加載與顯示順序

一、QML界面控件加載順序 QML在界面加載時的順序和我們認知的有很大的不同&#xff0c;有時候會對我們獲取參數以及界面實現造成很大的困擾 1、加載順序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …

Open3D點云算法與點云深度學習案例匯總(長期更新)

目錄 引言 Open3D算法匯總 Open3D快速安裝 測試點云資料 一、點云的讀寫與顯示 二、KD tree和八叉樹的應用 三、點云特征提取 四、點云濾波算法 五、點云配準算法 六、點云分割算法&#xff08;待更新&#xff09; 七、常用操作 八、數據轉換 九、常用小工具 三維…

交換機的二三層原理

相同VLAN的交換機交換原理&#xff08;二層交換原理&#xff09;&#xff1a; 交換機收到數據幀&#xff0c;首先會檢查數據幀的VLAN標簽和目標MAC&#xff0c;若屬于相同VLAN&#xff0c;且該目標MAC在本地MAC表中&#xff0c;則直接根據出接口進行數據轉發 不同VLAN的交換機…

九盾安防:如何調控叉車限速器的報警速度呢

在繁忙的物流倉儲和制造業環境中&#xff0c;叉車是不可或缺的搬運設備。然而&#xff0c;其高速行駛也帶來了潛在的安全隱患。為了確保作業人員和貨物的安全&#xff0c;又車限速器的設置顯得尤為關鍵。那么&#xff0c;如何調控叉車限速器的報警速度呢? 叉車限速器的速度調整…