給定乙個包括 n 個整數的陣列nums
和 乙個目標值target
。找出nums
中的三個整數,使得它們的和與target
最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.思考:和15.三數之和一樣,雙指標left和right來遍歷陣列,dif來記錄乙個初始差值(3個數的和與target)。有幾點一開始沒想清楚。與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
1、一開始我只儲存了乙個最小差值,然後發現做不出來,因為最接近相當於是乙個絕對值運算,最後如果不儲存3個數之和,根據絕對值的差異再去求三個數很複雜。
2、在判斷指標移動的時候,思考錯了,弄了比較長時間。
//if(closest >sum)
/*最接近的三數之和與當前三數和的比較,和指標怎麼走向沒關係汗...
應該:當前的三數之和sum 和 target 比較就行了啊*/
if(sum > target)
right--;
else
left++;
}
3、判斷迴圈次數的條件:這次用的陣列總元素減去2個,相當於肯定你選3個數,當前的和 left 和 right。正好。可是以前為啥都用nums.size()?沒太懂,因為這個時間複雜度基本不影響(額多迴圈2次還是有影響),就沒管了。。還是寫這次的寫法。
for(int i = 0; i< nums.size() -2 ;i++) 這次寫法
// for(int i = 0; i< nums.size() ;i++) 以前的寫法
**:
class solution
//if(closest >sum)
if(sum > target)
right--;
else
left++;}}
return closest;
}};
16 最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 如果...
16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...