タイトル説明
n個の整数と目標NUMSターゲットを含むアレイを考えます。NUMSは三つの整数を特定し、そのような彼らの最も近いことをターゲットにしています。3つの数字とリターン。各グループは唯一の答えのみ入力があることを前提としています。
思考
- そして、同様の3とアイデアの数が、プラスの誤差は、最小エラーリターンが決定されます
コード
この方法の一つ:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size()==0)
return 0;
if(nums.size()==1)
return nums[0];
sort(nums.begin(),nums.end());
int res = INT_MAX;
for(int i = 0; i < nums.size()-2;i++)
{
int error = TwoSumClosest(nums,i,target);
if (abs(error)<abs(res))
res = error;
}
return target+res;
}
int TwoSumClosest(vector<int>& nums,int i, int target)
{
target = target - nums[i];
int left = i + 1, right = nums.size()-1;
int error = INT_MAX;
while(left<right)
{
int sum = nums[left] + nums [right];
if (abs(sum - target)<abs(error))
error = sum - target;
if(sum < target)
left++;
else if(sum > target)
right--;
else
return 0;
}
return error;
}
};