快排使 numsnumsnums 正序。
设置三个指针 iii 指向 numsnumsnums 第一个数,从前往后枚举 nums[i]nums[i]nums[i] , lll 从 nums[i+1]nums[i+1]nums[i+1] 往后,指向第二个数,rrr 从 nums.size()−1nums.size()-1nums.size()−1 往左,指向第三个数。
维护 ansansans 变量,保存最接近的三数之和 。 设三数之和 nums[i]+nums[l]+nums[r]=sumnums[i]+nums[l]+nums[r]=sumnums[i]+nums[l]+nums[r]=sum , 如果 ∣sum−target∣>∣ans−target∣|sum-target|>|ans-target|∣sum−target∣>∣ans−target∣ ,则 ansansans 更新成 sumsumsum 。
如果 sum>targetsum>targetsum>target ,为了接近 targettargettarget , r−−r--r−− 。 同理, sum 理解思路很重要!代码展示
class Solution {
public:int threeSumClosest(vector
博主致语
欢迎读者在评论区留言,作为日更博主,看到就会回复的。AC
复杂度分析
上一篇:里的拼音(池塘里的拼音) 里的拼音 里的拼音怎么写的呢
下一篇:Java无锁并发