Leetcode:四數之和

題目鏈接:18. 四數之和 - 力扣(LeetCode)

普通版本(排序 + 雙指針)

主旨:類似于三數之和的解法,但需要多加一些限制,同時為了防止多個數組元素的相加之和出現整型溢出問題還要將整型轉為long

補充:(long) nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3]?是表達式的類型提升,有一個long則后面的所有運算均提升為long操作?

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> quadruplets;if (nums.size() < 4) {return quadruplets;}sort(nums.begin(), nums.end());int length = nums.size();for (int i = 0; i < length - 3; i++) {if (i > 0 && nums[i] == nums[i - 1]) {continue;}if ((long) nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) {break;}if ((long) nums[i] + nums[length - 3] + nums[length - 2] + nums[length - 1] < target) {continue;}for (int j = i + 1; j < length - 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[length - 2] + nums[length - 1] < target) {continue;}int left = j + 1, right = length - 1;while (left < right) {long sum = (long) nums[i] + nums[j] + nums[left] + nums[right];if (sum == target) {quadruplets.push_back({nums[i], nums[j], nums[left], nums[right]});while (left < right && nums[left] == nums[left + 1]) {left++;}left++;while (left < right && nums[right] == nums[right - 1]) {right--;}right--;} else if (sum < target) {left++;} else {right--;}}}}return quadruplets;}
};

時間復雜度:O(N^3)(查找前兩個數要兩次for,查找后兩個數因為有雙指針同時向里走的緣故,所以只用一層for)

空間復雜度:O(log n) (仍然是花費在了排序的額外空間上)

優化版本(待補充)

~over~

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

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

相關文章

基于python可伸縮JSON格式列表實現

對于消息體為一個json格式列表&#xff0c;列表長度變化的代碼設計&#xff0c;如下實現可供參考。 1、python語言實現(直接取值) #codingutf-8n 2 # 行項目數 productCode [11111,222222,333333] unit [H06,H07,H08] qty [6,7,8] items []for i in range(0, n):item …

數據分析每周挑戰——心衰患者特征數據集

這是一篇關于醫學數據的數據分析&#xff0c;但是這個數據集數據不是很多。 背景描述 本數據集包含了多個與心力衰竭相關的特征&#xff0c;用于分析和預測患者心力衰竭發作的風險。數據集涵蓋了從40歲到95歲不等年齡的患者群體&#xff0c;提供了廣泛的生理和生活方式指標&a…

spring事務實現原理

Spring事務的實現原理主要是基于AOP&#xff08;面向切面編程&#xff09; 事務的開啟與提交/回滾 開啟事務&#xff1a;當Spring容器中的AOP代理檢測到一個匹配的切點方法被調用時&#xff0c;它會首先開啟一個新的事務或者加入到現有的事務中&#xff08;這取決于事務傳播行…

【讀腦儀game】

讀腦儀&#xff08;Brain-Computer Interface&#xff0c;BCI&#xff09;游戲是一種利用腦電信號來控制游戲的新型交互方式。這類游戲通常需要專業的硬件設備來讀取用戶的腦電信號&#xff0c;并將這些信號轉化為游戲中的控制信號。編寫這樣的游戲代碼涉及到多個方面&#xff…

瀚高數據庫相關設置

瀚高數據庫相關設置 一、配置瀚高數據庫局域網訪問 需要修改兩個文件&#xff1a;postgresql.conf和pg_hba.conf 1&#xff09;在postgresql.conf中找到下述配置&#xff0c;把listen_addresses前面的注釋去掉&#xff0c;值修改為* # - Connection Settings -#listen_addresse…

IO進程線程(九)線程的同步 進程間通信

文章目錄 一、 線程的同步&#xff08;一&#xff09;無名信號量sem1. 定義和初始化2.獲取信號量3.釋放信號量4. 銷毀5. 使用示例 &#xff08;二&#xff09;條件變量1. 定義和初始化2. 獲取條件變量3. 釋放條件變量4. 銷毀條件變量 二、進程間通信&#xff08;一&#xff09;…

web-上傳項目文件夾到Git遠程倉庫

Git初識 概念&#xff1a;一個免費開源&#xff0c;分布式的代碼版本控制系統&#xff0c;幫助開發團隊維護代碼 作用&#xff1a;記錄代碼內容&#xff0c;切換代碼版本&#xff0c;多人開發時高效合并代碼內容 檢驗成功 打開bash終端&#xff08;git專用&#xff09;命令…

12. MySQL 日志

文章目錄 【 1. 日志的基本原理 】【 2. 錯誤日志 Error Log 】2.1 啟動和設置錯誤日志2.2 查看錯誤日志2.3 刪除錯誤日志 【 3. 二進制日志 Binary Log 】3.1 啟動和設置二進制日志3.2 查看二進制日志3.3 刪除二進制文件刪除所有二進制日志刪除小于指定編號的二進制日志刪除創…

【vue3+pinia+uniapp項目問題:使用pinia狀態管理時store的數據更新,模板渲染視圖不能實時更新】

在這里選擇不同的學校后&#xff0c;發現store里面的數據打印出來能更新&#xff0c;但是使用store的數據打印出來并未實時更新且渲染在模板上&#xff0c;必須手動刷新視圖才能更新。 原因是因為使用了解構賦值傳入參數 解決方法 1.使用computed 現在視圖能進行實時更新…

分享一個 .Net core Console 項目使用 SqlSugar 的詳細例子

前言 SqlSugar 是一款老牌的 .NET 開源 ORM 框架&#xff0c;性能高&#xff0c;功能全面&#xff0c;使用簡單&#xff0c;支持 .NET FrameWork、.NET Core3.1、.NET5、.NET6、.NET7、.NET8、.NET9 等版本&#xff0c;線上論壇非常活躍&#xff0c;今天給大伙分享一個 .Net c…

查看遠程桌面端口,查看服務器的遠程桌面端口的方法

如果你正在尋找一種方法來檢查服務器的遠程桌面端口&#xff0c;那么請務必按照以下步驟操作&#xff0c;以確保準確且安全地獲取所需信息。這不僅是一個技術問題&#xff0c;更是一個關于效率和安全性的重要議題。 首先&#xff0c;你需要明確&#xff0c;遠程桌面端口通常是…

回溯算法之遞增子數列

題目&#xff1a; 給你一個整數數組 nums &#xff0c;找出并返回所有該數組中不同的遞增子序列&#xff0c;遞增子序列中 至少有兩個元素 。你可以按 任意順序 返回答案。 數組中可能含有重復元素&#xff0c;如出現兩個整數相等&#xff0c;也可以視作遞增序列的一種特殊情…

【數據結構與算法 | 二叉樹篇】二叉樹的前中后序遍歷(迭代版本)

1. 前言 前文我們實現了二叉樹前中后三種遍歷方式的遞歸版本&#xff0c;非常簡單. 接下來我們來實現一下其迭代版本. 2. 二叉樹的前序遍歷 (1). 題 給你二叉樹的根節點 root &#xff0c;返回它節點值的 前序 遍歷。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2…

語音技能云云接入通用平臺

Cloud-to-Cloud(云云接入) 前言 項目地址&#xff1a;https://github.com/LeYunone/cloud-to-cloud 配置說明&#xff1a;https://leyunone.com/github-project/voice-cloud-cloud-config.html 注&#xff1a;學習測試以及使用請拉取 master 分支&#xff0c;release 是開發…

python pip 安裝

如果您不確定pip的安裝路徑&#xff0c;可以通過以下命令來查詢&#xff1a; pip show pip 這個命令會顯示pip的詳細信息&#xff0c;其中包括pip安裝的路徑。如果您想修改pip的默認安裝路徑&#xff0c;可以使用pip的"--target"參數指定目標路徑&#xff0c;例如&a…

8.7k Star!Khoj:你的AI第二大腦、開源RAG Cop??ilot、平替 MS Copilot與ChatGPT

原文鏈接&#xff1a;&#xff08;更好排版、視頻播放、社群交流、最新AI開源項目、AI工具分享都在這個公眾號&#xff01;&#xff09; 8.7k Star&#xff01;Khoj&#xff1a;你的AI第二大腦、開源RAG Cop??ilot、平替 MS Copilot與ChatGPT &#x1f31f;你的AI第二大腦。…

zynq-7015啟動分析及裸機BootLoader編寫(未完待續)

使用lwip-tcp遠程對QSPI進行更新、QSPI FLASH啟動 W25Q128資料&#xff1a; W25Q128JV datasheet(1/78 Pages) WINBOND | 3V 128M-bit serial flash memory with dual/quad spi (alldatasheet.com) UG585資料&#xff1a; Zynq 7000 SoC Technical Reference Manual-UG585 翻譯…

【ARFoundation自學05】人臉追蹤(AR Face manager)實現

1. 修改攝像機朝向渲染方式-選中user 這個方式就會調用前置攝像頭 2 創建 AR Session、XR Origin&#xff0c;然后在XR Origin上面添加組件 注意&#xff1a;XR Origin 老版本仍然叫 AR Session Origin 接下來在XR Origin上面添加AR Face Manager組件&#xff0c;如下圖&am…

劇本殺市場仍在快速發展,劇本殺小程序成為了新的機遇

近年來&#xff0c;劇本殺一直是年輕人的娛樂游戲方式之一&#xff0c;劇本殺行業呈現出了井噴式發展的形勢&#xff0c;成為了當下爆火的娛樂方式。目前&#xff0c;劇本殺行業擁有了完善的劇本資源和呈現方式&#xff0c;發展前景非常大。 根據當下的數據顯示&#xff0c;劇…

NextJs 實現自定義點火操作

NextJs 實現自定義點火操作 前言實現自定義點火 前言 我希望在Nextjs 啟動的時候&#xff0c;能夠自定義實現一些項目的初始化邏輯&#xff0c;也可以說是一些點火操作&#xff0c;比如資源的加載&#xff0c;數據的初始化等操作。 實現自定義點火 我們可以在根目錄下創建一…