最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
思路:排序+双指针
时间复杂度:O(nlogn)+O(n2)=O(n2)
双指针:一个指针再作,一个指针在右,相互靠近
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); int cha=INT_MAX,n=nums.size(),start,end,i(0),sum,finalsum; for(;i<(n-2);i++){ start=i+1; end=n-1; do{ sum=nums[i]+nums[start]+nums[end]; //finalsum=sum; if(sum<target){ start++; if((target-sum)<cha){ cha=target-sum; finalsum=sum; } } else if(sum==target) return target; else{ end--; if((sum-target)<cha){ cha=sum-target; finalsum=sum; } } }while(start<end); } return finalsum; } };

浙公网安备 33010602011771号