給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
示例:輸入:nums = [-1,2,1,-4], target = 1
輸出:2
解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
class solution
int sum = nums[i]+nums[left]+nums[right];
if (abs(sum - target) < abs(nearest - target)) //修改值
nearest = sum;
if (sum == target) //根據sum與target的相對大小修改指標
break;
else if (sum < target)
++left;
else
--right;}}
return nearest;
}};
另一種編碼如下:
class solution
int sum = nums[first] + nums[second] + nums[third];
diff = abs(target - sum);
if (diff < mindiff)
if (sum < target)
second++;
else if (sum > target)
third--;}}
return res;
}};
綜上,結合三數之和中三數之和的題目,總結該題目的要點:
1:target未指定正負,相對於三數之和,本題目無法對三數的首數做短路判斷,因為首數可為正(target為正),可為0,可為負(target為負,越加和越小,越接近target)
2:對於查詢目標數對的題目,需要注意對各個數進行去重判斷,防止做重複的後續工作
3:初始化可以選擇最極端的初始化,可以用有效數進行乙個初始化
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 1 2 如果...
16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...