首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 18 4Sum:雙指針 + 去重的 K-Sum 通用框架

     編輯:關於C++

題目大意

給定數組 nums 和目標值 target,找出所有不重複的四元組 [a,b,c,d] 使和為 target。四元組內非降序,解集不重複。

K-Sum 通用遞歸框架

排序數組。kSum(start, k, target) 返回從 start 開始的 k 數之和為 target 的所有組合。
- k==2:雙指針雙數之和,去重。
- k>2:遍歷 i 從 start 到 n-k,剪枝(最小和 > target / 最大和 < target),遞歸調用 kSum(i+1, k-1, target-nums[i]),拼接結果。
去重關鍵:if (i>start && nums[i]==nums[i-1]) continue;。

4Sum 專用雙指針(非遞歸)

方法時間空間備註
雙指針O(n³)O(1)常數小,工程首選
HashMap平均 O(n²)O(n²)最壞 O(n⁴),需大量內存
K-Sum 遞歸O(n^{k-1})O(k)通用框架,易擴展

							
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved