【LeetCode16】最接近的三数之和(双指针)

简介: 和leetcode15三数之和类似,三层循环时间复杂度O ( n 3 ) O(n^3)O(n 3 )过高,使用双指针虽说不能马上降到O ( n ) O(n)O(n),但就是这类题的常用套路:遍历一遍数组元素,当前元素为num[i];

一、题目

image.png


二、思路

和leetcode15三数之和类似,三层循环时间复杂度O ( n 3 ) O(n^3)O(n

3

)过高,使用双指针虽说不能马上降到O ( n ) O(n)O(n),但就是这类题的常用套路:


遍历一遍数组元素,当前元素为num[i];

设立左右指针,右指针为右端点,注意左指针为left + 1,而不是从0开始,否则会因为重复遍历而有重复元素;当三数之和大于target则right左移缩小值。

每次判断当前三数组合时,即计算和target之间的差值,如果比当前最小差值minAbsError还小,则可以进行更新。

三、代码

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        int ans = 0, left = 0, right = 0; 
        int minAbsError = INT_MAX, error = 0, absError = 0, temp = 0;
        for(int i = 0; i < nums.size() - 2; i++){
            left = i + 1;
            right = nums.size() - 1;    
            while(left < right){
                temp = nums[i] + nums[left] + nums[right];
                error = temp - target;
                absError = abs(error);
                if(minAbsError > absError){
                    //更新过程
                    ans = temp;
                    minAbsError = absError;
                }else if(error > 0){
                    right--;
                }else{
                    left++;
                }
            }    
        }
        return ans;
    }
};

image.png


相关文章
|
4月前
|
算法
LeetCode第16题最接近的三数之和
该文章介绍了 LeetCode 第 16 题最接近的三数之和的解法,与第 15 题类似,通过双指针法减少循环次数,根据差值的绝对值来更新最接近的和,并总结了双指针可减少循环次数的要点。
|
4月前
|
Python
【Leetcode刷题Python】16. 最接近的三数之和
解决LeetCode "最接近的三数之和" 问题的Python实现,通过排序和双指针法,记录并更新与目标值最接近的三数之和。
40 1
|
4月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
22 1
|
6月前
|
索引
力扣每日一题 6/17 枚举+双指针
力扣每日一题 6/17 枚举+双指针
34 1
|
6月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
6月前
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
|
6月前
|
存储 算法 数据挖掘
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
|
6月前
|
存储 算法 数据可视化
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表