Contents
Problem
從集合中找出兩個不相同的數相加後與 k 最接近。
Solution
窮舉出每一個 k - num[i]
也就是 i = 0 ~ n-1 ,在從集合裡利用二分找出 x 使 k - num[i] + num[x]
最接近 k 的 (這裡直接使用 std::lower_bound
),再比較這些看誰最接近 k 。
在二分搜後如果沒有找到剛好可以等於 k 的,不確定大於 k 還是小於 k 會更接近 k ,所以多判斷了一下,如果總和大於 k ( std::lower_bound
會找第一個大於等於的),就去比較小於的:
if (num[idx] > diff && (idx - 1) != i)
{
temp = ABS(diff - num[idx - 1]);
if (temp < diff2)
{
idx--;
diff2 = temp;
}
}
(下面完整 code 可能比較容易理解)
Code
1 |
|