LeetCode实战 -- Task05.最接近的三数之和
作者:互联网
题目:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
算法:
先对数组进行排序,然后遍历一次数组,找出target对应数组所在的位置,定义left和right作为target的左右两个指针,比较left与right分别和target的差值,选取较小的那一个作为结果加在result上,对应的指针向左边或右边移动,循环比较,得到最终的结果。
时间复杂度:O(n2)
空间复杂度:O(n)
代码:
class Solution
{
public:
int threeSumClosest(vector<int>& nums, int target)
{
sort(nums.begin(), nums.end());
if(nums.size()<3) return 0;
int ans = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.size(); i++)
{
int left = i + 1, right = nums.size() - 1;
while (left < right)
{
int sum = nums[left] + nums[right] + nums[i];
if (abs(target - sum) < abs(target - ans)) ans = sum;
if (sum > target) right--;
else if (sum < target) left++;
else return ans;
}
}
return ans;
}
};
执行结果:
标签:right,target,nums,int,三数,数组,Task05,LeetCode,left 来源: https://blog.csdn.net/qq_42093469/article/details/104673396