LeetCode 923.多重三數之和

給定一個整數數組 arr ,以及一個整數 target 作為目標值,返回滿足 i < j < k 且 arr[i] + arr[j] + arr[k] == target 的元組 i, j, k 的數量。

由于結果會非常大,請返回 109 + 7 的模。

示例 1:

輸入:arr = [1,1,2,2,3,3,4,4,5,5], target = 8
輸出:20
解釋:
按值枚舉(arr[i], arr[j], arr[k]):
(1, 2, 5) 出現 8 次;
(1, 3, 4) 出現 8 次;
(2, 2, 4) 出現 2 次;
(2, 3, 3) 出現 2 次。
示例 2:

輸入:arr = [1,1,2,2,2,2], target = 5
輸出:12
解釋:
arr[i] = 1, arr[j] = arr[k] = 2 出現 12 次:
我們從 [1,1] 中選擇一個 1,有 2 種情況,
從 [2,2,2,2] 中選出兩個 2,有 6 種情況。

提示:

3 <= arr.length <= 3000
0 <= arr[i] <= 100
0 <= target <= 300

先對arr進行排序,然后固定一個數字,進行相向雙指針計算即可:

class Solution {
public:int threeSumMulti(vector<int>& arr, int target) {long long ans = 0;sort(arr.begin(), arr.end());// 每次固定一個數字for (int i = 0; i < arr.size() - 2; ++i) {int left = i + 1;int right = arr.size() - 1;if (arr[i] + arr[i + 1] + arr[i + 2] > target) {break;}if (arr[i] + arr[right] + arr[right - 1] < target) {continue;}while (left < right) {if (arr[i] + arr[left] + arr[right] > target) {--right;} else if (arr[i] + arr[left] + arr[right] < target) {++left;} else {// 如果left和right指向的數字的值相同// 說明[left, right]中任意兩數字加arr[i]的和都為targetif (arr[left] == arr[right]) {ans += (right - left + 1) * (right - left) / 2;break;}// 計算左指針指向的數字有多少個連續相同的int leftSame = 1;++left;while (arr[left] == arr[left - 1]) {++leftSame;++left;}// 計算右指針指向的數字有多少個相同的int rightSame = 1;--right;while (arr[right] == arr[right + 1]) {++rightSame;--right;}ans += leftSame * rightSame;}}}return ans % (int)(1e9 + 7);}
};

如果arr的長度為n,則此算法時間復雜度為O(n2^22),空間復雜度為O(logn)。

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

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

相關文章

.Net日志系統Logging-五

日志概念 日志級別 NET (Microsoft.Extensions.Logging) 中定義的 6 個標準日志級別&#xff0c;按嚴重性從低到高排列&#xff1a; 日志級別數值描述典型使用場景Trace0最詳細的信息&#xff0c;包含敏感數據&#xff08;如請求體、密碼哈希等&#xff09;。僅在開發或深度故…

中國貿促會融媒體中心出海活動負責人、出海星球創始人蒞臨綠算技術

近日&#xff0c;中國貿促會融媒體中心出海活動負責人、出海星球創始人王思諾一行蒞臨廣東省綠算技術有限公司&#xff0c;深入考察其核心技術產品與全球化布局。雙方圍繞綠算技術全棧產品體系、創新出海模式及生態共建展開深度對話。綠算技術作為國內智算基礎設施領域的領軍企…

【算法專題訓練】06、數組雙指針

1、數組 數組是由相同類型的元素組成的數據集合&#xff0c;并且占據一塊連續的內存&#xff0c;按照順序存儲數據。 1.1、數組的特性&#xff1a; 數組元素通過下標獲取數據數組對象初始化時&#xff0c;需要先指定數組容量大小&#xff0c;并根據容量大小分配內存。缺點&…

操作系統-lecture2(操作系統結構)

回顧下lecture1 swap區域不可以馬上執行&#xff0c;即虛擬內存的數據和指令不可以被執行&#xff0c;得交換回到內存區域 操作系統的服務 主要提供兩種服務 面向普通用戶&#xff1a;user interface面向程序員&#xff1a;應用級程序代碼 為用戶 為用戶提供了操作包括但不…

內網服務器實現從公網穿透

從6月份tplink的ddns失效之后&#xff0c;對于部分在內網運行的服務器&#xff0c;從公網訪問就收到了部分影響。有好幾個朋友找來&#xff0c;尋求幫助&#xff0c;看看怎么恢復原來的機制&#xff0c;可以從公網互聯網訪問內網服務器。方案一&#xff1a;如果有動態公網的客戶…

vcs-編譯+仿真+dump波形【IMP】

VCS仿真分為兩步式(編譯/compilation仿真/simulation)和三步式(分析/analysis細化/elaborationsimulation/仿真);注2:analysis/分析是三步式flow中仿真design的第一步&#xff0c;在此階段將使用vhdlan或vlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括…

程序代碼篇---python向http界面發送數據

在 Python 中向 HTTP 界面發送數據&#xff0c;本質上是模擬用戶在網頁上填寫表單、點擊提交按鈕的過程。這在自動化測試、數據上報、接口調用等場景中非常常用。下面用通俗易懂的方式介紹具體方法、實例代碼和解析。核心原理網頁上的數據發送&#xff08;比如提交表單&#xf…

mybatis-plus由mysql改成達夢數據庫

前置條件: 達夢數據庫設置了大小寫敏感,我比較菜,改不動!先這么湊合著用吧; 因為設置了大小寫敏感,所以所有的sql語句都要加 引號; 這樣是會報錯的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config這樣才可以 SELECT "create_…

設計模式:外觀模式 Facade

目錄前言問題解決方案結構代碼前言 外觀是一種結構型設計模式&#xff0c;能為程序庫、框架或其他復雜類提供一個簡單的接口。 問題 假設你必須在代碼中使用某個復雜的庫或框架中的眾多對象。正常情況下&#xff0c; 你需要負責所有對象的初始化工作、 管理其依賴關系并按正確…

【數據結構初階】--二叉樹(四)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

三、平面度檢測-差值法

方法一: dev_get_window (WindowHandle) *讀取3通道彩色融合圖 read_image (Image, ./XYZ彩色融合圖.tiff) *拆分3個通道 decompose3 (Image, x, y, z) *將3個通道圖像轉換為3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *顯示動態3D模型 threshold (z, Regions,…

什么是數據編排?數據編排的流程、優勢、挑戰及工具有哪些?

目錄 一、數據編排的定義與概念 1.數據編排的基本含義 2.數據編排與相關概念的區別 3.數據編排的重要性 二、數據編排的流程 1.需求分析&#xff1a; 2.數據源識別與連接&#xff1a; 3.數據抽取&#xff1a; 4.數據轉換&#xff1a; 5.數據加載&#xff1a; 6.監控…

【C++算法】82.BFS解決FloodFill算法_被圍繞的區域

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 130. 被圍繞的區域 題目描述&#xff1a; 解法 BFS一層層剝開。 C 算法代碼&#xff1a; class Solution {// 定義四個方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商湯發布具身智能平臺,讓機器人像人一樣和現實世界交互

7月27日&#xff0c;在“大愛無疆模塑未來”WAIC 2025大模型論壇上&#xff0c;商湯科技重磅發布「悟能」具身智能平臺。「悟能」具身智能平臺以商湯具身世界模型為核心引擎&#xff0c;依托商湯大裝置提供端側和云側算力支持&#xff0c;能夠為機器人、智能設備提供強大的感知…

MCP工作原理

在談MCP原理前&#xff0c;我們先談談MCP的技術前身—Function Calling。1.Function Calling技術在FunctionCalling技術出現之前&#xff0c;大語言模型雖然擁有強大的知識儲備和語言理解能力&#xff0c;但是只能提供自身數據庫已有的信息&#xff0c;無法和外界進行信息交互。…

VSCode手動版本更新

技術背景 使用VSCode的的過程中&#xff0c;如果打開了自動更新功能&#xff0c;每隔一段時間就會有更新提示。為了保持版本的穩定性&#xff0c;我們可以在設置中將Update: Mode設置為none&#xff0c;這樣就不會觸發自動更新。但有時又有版本更新的需求&#xff0c;可能是版本…

醫療超聲成像專用AFE模擬前端

醫療超聲成像作為一種廣泛應用于臨床診斷的重要技術&#xff0c;對于提供清晰、準確的醫學圖像起著關鍵作用。在超聲成像系統中&#xff0c;AFE模擬前端扮演著至關重要的角色。它負責對超聲換能器接收到的微弱電信號進行處理和轉換&#xff0c;為后續的數字信號處理提供高質量的…

機器學習之線性回歸——小白教學

一、線性回歸簡介1.什么是線性回歸線性回歸(Linear regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。特點&#xff1a;只有?個?變量的情況稱為單變量回歸&#xff0c;多于?個?變量情況的叫做多元回歸線性回…

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布&#xff0c;微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面&#xff0c;旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況&#xff0c;安寶特提出了“AI算法能力開放平臺”&#xff0c;目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…