**實現
最後 首先我們先來看一下題目的描述:
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-j1j4jlzt-1593154112609)(
對於這個問題我們先從簡單的場景來分析:
只找乙個數
那最簡單的場景無非是找最接近的一數之和,那麼我們只需要維護乙個變數:best。best記錄這個目前的最佳值,遇到更合適的就替換這個best直到遍歷完整個陣列。
找兩個數的和
再複雜一點就是找最接近的兩個數的和。最簡單的想法就是化簡為上一種情況,將目標值先減去乙個值,然後在去尋找剩下的,但是這樣由於巢狀for迴圈導致時間複雜度不是很友好,存在優化的空間。
現在問題來了:到底優化的空間在**?如何將這一部分空間節約出來?
上述方法存在的問題就是,當我們第乙個已經比目標值小的情況下在去和乙個負值相加就更不可能是我們的目標,再往下擴充套件一步就是,當我們a+b已經小於目標值的情景下,再去找乙個比b小的值來和a相加就完全沒有必要了。
找三個數的和
既然有了前兩次的經驗,那我們就轉化為找兩數之和,即先找乙個固定值,然後雙指標。
public
intthreesumclosest
(int
nums,
int target)
// 判斷是否需要更新最佳值
if(math.
abs(sum - target)
< math.
abs(best - target)
)// 判斷雙指標哪乙個需要移動
if(sum > target)
else}}
return best;
}
leetcode 16 設計雜湊集合
題目 不使用任何內建的雜湊表庫設計乙個雜湊集合 具體地說,你的設計應該包含以下的功能 示例 myhashset hashset new myhashset hashset.add 1 hashset.add 2 hashset.contains 1 返回 true hashset.contains ...
leetcode(16)最長公共子串行
package fan2 最長公共子串行 給出兩個字串a b,求a與b的最長公共子串行 子串行不要求是連續的 比如兩個串為 abcicba abdkscab ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。public class dp07 lcs else a...
LeetCode 16 分割回文串
碼上生花,echarts 作品展示賽正式啟動!給給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。深度優先搜尋演算法 英語 depth first search,...