算法力扣刷題記錄 二十【18題. 四數之和】

前言

哈希篇,繼續。
記錄 二十【18題. 四數之和】


一、題目閱讀

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

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
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
-10^9 <= nums[i] <= 10^9
-10^9 <= target <= 10^9

二、嘗試實現

學過“三數之和”,同法炮制可以求解4數之和。但是同樣有問題需要注意,先上代碼,再說細節點:

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());//排序vector<vector<int>> result;if((nums[nums.size()-1] < 0 && target >= 0) || (nums[0] > 0 && target <= 0)){return result;}for(int a = 0;a < nums.size();a++){if(a > 0 && nums[a] == nums[a-1]){  //a去重continue;}for(int b = a+1;b < nums.size();b++){if((b-1 > a) && nums[b] == nums[b-1]){///b-1>a。continue;}int c = b+1;int d = nums.size()-1;while(c < d){if(nums[a] + nums[b] > target - nums[c] - nums[d]){d--;}else if(nums[a] + nums[b] < target- nums[c]- nums[d]){c++;}else{result.push_back({nums[a],nums[b],nums[c],nums[d]});while(c < d && nums[d] == nums[d-1]){d--;}while(c < d && nums[c] == nums[c+1]){c++;}c++;d--;}}}}return result;}
};

細節及區別:

  • a,b,c,d分別去重;用c、d作為活動區間,所以c,d去重兩個while,注意c<d即可;a去重,保證下標不違法,逐步后移。

    • 重點是b去重,第二層循環,b=a+1,從a+1開始,所以去重應該(b-1 > a),否則nums[b]和nums[a]比較,錯誤。另外因為先b++再去重,所以nums[b]和nums[b-1]比較。
  • 直接返回部分:

     if((nums[nums.size()-1] < 0 && target >= 0) || (nums[0] > 0 && target <= 0)){return result;}
    
    • target不再是0,nums元素有正有負(注意提示)。所以能夠直接返回的條件是:
    • nums全為負,target >=0,肯定空;
    • nums全為正,target <=0,肯定空;
  • 提示:-109 <= nums[i] <= 109,說明可能(nums[a] + nums[b] +nums[c] + nums[d])超出“int”類型范圍,導致運行錯誤。

    • 怎么控制求和不超過int類型最大值?
    • 把nums[c] + nums[d]移到等式的右邊,3個109相加超過int,2個109相加可以不超過int范圍。

代碼隨想錄學習

學習內容

思路:同思路。

代碼實現區別

  • 去重——操作一樣。回顧細節部分第一點;

  • 剪枝:有所區別。回顧細節部分第二點;

    • 參考給出的剪枝操作,分別在第一層a所在循環和第二層b所在循環。
    • 第一層循環剪枝:(nums[a] > target && nums[a] > 0 )。解釋原因:nums[a]>0,后面的肯定也是大于0(排過序),加正數會越加越大。所以可以break;
    • 第二層循環剪枝:(nums[a] +nums[b]> target && nums[a] +nums[b] >= 0 ),把nums[a] +nums[b]看作一個整體。為什么呢?
      • target>=0時候肯定沒有問題;
      • 當target < 0,nums[a] +nums[b] >= 0,那么nums[b] 一定>= 0,保證nums[b]后面都是正數,往后會越加越大,所以可以break;
      • 如果只是nums[b] >= 0,可以嗎?可以。因為nums[b]往后都是正數,加正數會越加越大。在nums[a] +nums[b]> target的基礎上。
      • 所以第一個條件得是nums[a] +nums[b]> target 。
  • 超出范圍怎么處理?回顧細節部分第三點;

    • 直接轉換成long類型。

總結

和“三數之和”思路一致,但同樣有細節需要主要:3點。

(歡迎指正,轉載表明出處)

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

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

相關文章

為什么要本地化您的多媒體內容?

當我們訪問網站、應用程序和社交媒體時&#xff0c;體驗不再局限于陳舊的文本和靜態圖像。現代處理能力和連接速度提高了快速加載視頻、音頻和動畫的可能性。 這一切都提供了更具沉浸感和互動性的用戶體驗。多媒體是數字營銷中最有效的內容之一&#xff0c;因為它對用戶更具吸…

vue-cli 項目打包優化-基礎篇

1、項目打包完運行空白 引用資源路徑問題&#xff0c;打包完的【index.html】文件引用其他文件的引用地址不對 參考配置&#xff1a;https://cli.vuejs.org/zh/config 修改vue.config.js &#xff0c;根據與 后端 或 運維 溝通修改 module.export {// 默認 publicPath: //…

使用API有效率地管理Dynadot域名,為文件夾中的域名設置域名轉發

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

全彩屏負氧離子監測站

TH-FZ5在追求綠色生態、健康出行的今天&#xff0c;景區不僅僅是人們休閑游玩的好去處&#xff0c;更是人們體驗大自然、感受清新空氣的重要場所。為了進一步提升游客的游覽體驗&#xff0c;許多景區紛紛引入了全彩屏負氧離子監測站&#xff0c;這一創新舉措不僅為景區增添了科…

【懷莊之醉白酒】懷莊之醉醬香白酒哪款好?

【懷莊之醉醬香白酒】在懷莊之醉醬香白酒的豐富系列中&#xff0c;懷莊之醉尊品、懷莊之醉三星和懷莊之醉匠心之作是三款受到廣泛歡迎的產品。 每一款酒都具備其獨特的風味和適合的飲用場合。以下是對這三款酒特性的分析&#xff1a; 懷莊之醉 尊品&#xff1a;懷莊之醉 尊品…

云通SIPX,您的碼號資源智能調度專家!

在數字化轉型的浪潮中&#xff0c;號碼資源作為企業與客戶溝通的重要橋梁&#xff0c;其管理效率直接關系到企業運營的成敗。隨著運營商對號碼資源管理的規范化和精細化&#xff0c;企業對高效、智能的號碼資源管理需求日益增長&#xff0c;以實現對外呼叫的降本增效。 一、什么…

學生成績管理系統帶8000字文檔學生選課管理系統java項目javaweb項目ssm項目jsp項目java課程設計java畢業設計

文章目錄 學生選課成績管理系統一、項目演示二、項目介紹三、8500字項目文檔四、部分功能截圖五、部分代碼展示六、底部獲取項目源碼帶8500字文檔&#xff08;9.9&#xffe5;帶走&#xff09; 學生選課成績管理系統 一、項目演示 選課成績管理系統 二、項目介紹 語言: Java …

php數據結構之鏈表

本文由 ChatMoney團隊出品 鏈表的基本概念 鏈表&#xff08;Linked List&#xff09;是一種常見的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點除了存儲數據外&#xff0c;還包含指向下一個節點的指針。與數組相比&#xff0c;鏈表在插入和刪除操作上具有更高…

直播帶貨大模型,開啟自動賣貨的時代

Streamer-Sales是一個為直播帶貨主播量身定制的智能工具。 它能夠智能分析商品特性&#xff0c;自動創作出引人入勝的解說詞&#xff0c;從而有效增強商品的吸引力和提升銷售業績。它還具備多種交互功能&#xff0c;比如將主播的語音實時轉換為文字&#xff0c;便于與觀眾進行…

移動端 UI 風格,書寫華麗篇章

移動端 UI 風格&#xff0c;書寫華麗篇章

原創作品—醫療行業軟件界面UI、交互設計

在醫療行業大屏UI設計中&#xff0c;首要的是以用戶為中心&#xff0c;深入理解醫生、護士、管理層等用戶群體的具體需求和工作流程。大屏設計應直觀展示關鍵醫療數據、患者信息、設備狀態等&#xff0c;確保用戶能夠迅速、準確地獲取所需信息。同時&#xff0c;功能布局應合理…

12寸和8寸封裝線的差異點

12英寸&#xff08;300mm&#xff09;晶圓封裝線與8英寸&#xff08;200mm&#xff09;晶圓封裝線在多個方面存在顯著區別&#xff0c;這些區別影響了它們的生產效率、成本結構和適用技術。以下是一些主要差異&#xff1a; 1. **晶圓面積**&#xff1a; - 12英寸晶圓擁有更…

??植物大戰僵尸雜交版直裝版v2.1 安卓版:全新策略塔防體驗

《植物大戰僵尸雜交版直裝版》v2.1是由B站UP主“潛艇偉偉迷”精心制作的同人游戲&#xff0c;為策略塔防手游帶來了全新的活力。游戲中引入了眾多創新的雜交植物&#xff0c;例如結合了向日葵的陽光生成能力和豌豆射手的攻擊特性的向日葵豌豆射手&#xff0c;以及擁有寒冰豌豆射…

docker打包 arm32v7/debian 問題總結

1.架構不同 我的宿主是x86 ,但是打包的是arm架構 安裝qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…

金融科技如何運用技術手段實現細顆粒度服務

隨著金融科技的快速發展&#xff0c;金融機構正在通過采用各種技術手段來提供更加細顆粒度的服務&#xff0c;以滿足客戶日益增長的個性化需求。這些技術手段不僅提高了金融服務的效率和安全性&#xff0c;還顯著提升了用戶體驗和滿意度。 一、大數據分析與人工智能&#xff08…

中國旺旺:廉頗老矣or老而彌堅?

從80后的童年吃到了20后的童年&#xff0c;什么舌尖上的產品能旺這么久&#xff1f; 相信大家都能說出他的名字——中國旺旺。 要問旺旺的第一單品是啥&#xff1f;毫無疑問是旺仔牛奶。 這也體現在財報上&#xff0c;2022財年&#xff0c;旺旺乳品、飲料品類收入雙位數下滑&…

【Sklearn馴化-回歸指標】一文搞懂機器學習中回歸算法評估指標:mae、rmse等

【Sklearn馴化-回歸指標】一文搞懂機器學習中回歸算法評估指標&#xff1a;mae、rmse等 本次修煉方法請往下查看 &#x1f308; 歡迎蒞臨我的個人主頁 &#x1f448;這里是我工作、學習、實踐 IT領域、真誠分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免…

動環監控系統數據可靠維護與效能實現

摘要&#xff1a;了解動環監控的功能,總結出通過分析監控系統的數據庫和系統軟件,采取措施對數據進行維護,充分利用監控系統,確保高效低耗的維護網絡。 關鍵詞&#xff1a;監控&#xff1b;數據丟失&#xff1b;備份&#xff1b;恢復&#xff1b;維護 0引言 隨著網絡信息化和…

如何提高外文文獻閱讀效率

要提高外文文獻閱讀效率&#xff0c;可以考慮以下幾點&#xff1a; 掌握基礎語言能力&#xff1a; 熟練掌握英語或其他目標語言的基礎詞匯和語法是提高閱讀效率的基礎。如果語言能力有限&#xff0c;可以通過課程、閱讀和聽力練習來增強。 選擇合適的文獻&#xff1a; 根據研…

python-docx 使用xml為docx不同的章節段落設置不同字體

本文目錄 前言一、完整代碼二、代碼詳細解析1、處理過程解釋(1) 引入庫并定義路徑(2) 創建docx的備份文件(3) 定義命名空間(4) 打開并處理.docx文件(5) 分析和組織文檔結構(6) 設置字體(7) 保存結果前言 本文主要解決的內容,就是為一個docx的不同章節段落設置不同的字體,因為…