M16.最接近的三数之和(排序双指针遍历)

mac2025-01-06  5

题目:

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

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

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). tip: 思路相似 和数求和相关的题,排序后使用双指针

solution:

class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end());//先排序 int n = nums.size(); int threesum=nums[0]+nums[1]+nums[2];//初始值设定 int sum_star = abs(nums[0]+nums[1]+nums[2]-target); for(int star = 0;star<n-2;star++) { int left = star+1,right = n-1;//固定第一个值,双指针遍历 while(left < right) { int sum = nums[star]+nums[left]+nums[right]; int sum_end = abs(sum-target); if(sum_end<sum_star) { sum_star=sum_end; threesum=sum; } if(sum>target) --right;//这里的切换条件为重点 else ++left; } } return threesum; } };
最新回复(0)