LeetCode刷题之旅(16)--最接近的三数之和(中等题)

每天属于自己的时间,就是慢慢的刷题的时候,啥也不用想,沉浸在写出最佳程序的过程中,沉浸在自己阅读大牛代码,提升自我的过程中,那种满足感,真的很让人享受<.>

题目:最接近的三数之和

1
2
3
4
5
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-121-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

解题思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
类似第15题,秒解

```c++
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size()==3)return nums[0]+nums[1]+nums[2];
sort(nums.begin(),nums.end());
int jilu_i=0,jilu_l=1,jilu_r=nums.size()-1;
int min=abs(nums[jilu_i]+nums[jilu_l]+nums[jilu_r]-target);
int l,r;
for(int i=0;i<nums.size();i++)
{
l=i+1;r=nums.size()-1;
while(l<r)
{
if(nums[i]+nums[l]+nums[r]==target)
{
return target;
}
else
{
if(min>abs(nums[i]+nums[l]+nums[r]-target))
{
min=abs(nums[i]+nums[l]+nums[r]-target);
jilu_i=i;
jilu_l=l;
jilu_r=r;
}
if(nums[i]+nums[l]+nums[r]>target)
{
r--;
}
else
{
l++;
}

}
}
}
return nums[jilu_i]+nums[jilu_l]+nums[jilu_r];

}
};
执行用时:12 ms
您的支持将鼓励我继续创作!