最接近的三数之和
解题思路:
和三数之和思路是一样的,双指针法就行。
代码:
for(int i=0;i<nums.Length-2;i++)
{
int left = i + 1;
int right = nums.Length - 1;//双指针法
while(left<right)
{
if (nums[i] + nums[left] + nums[right]<target)
{
if (target - nums[i] - nums[left] - nums[right] < min)
{
min = target - nums[i] - nums[left] - nums[right];
result = nums[i] + nums[left] + nums[right];
left++;
}
else left++;
}//小于的情况。由于排了序的所以为了更接近就left++。
else if (nums[i] + nums[left] + nums[right] == target)
{
return target;
}//如果有等于的直接返回target。
else if (nums[i] + nums[left] + nums[right] > target)
{
if (nums[i] + nums[left] + nums[right] - target < min)
{
min = nums[i] + nums[left] + nums[right] - target;
result = nums[i] + nums[left] + nums[right];
right--;
}
else right--;
}//大于的情况。
}
}
return result;
}