【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天前
|
索引
力扣每日一题 6/17 枚举+双指针
力扣每日一题 6/17 枚举+双指针
6 1
|
22天前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
22天前
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
|
22天前
|
存储 算法 数据挖掘
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
|
22天前
|
存储 算法 数据可视化
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
深入解析力扣160题:相交链表的解决方法(哈希表法与双指针法详细图解)
|
2月前
|
算法
[优选算法]——双指针——Leetcode——1089. 复写零
[优选算法]——双指针——Leetcode——1089. 复写零
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
19天前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
22天前
|
存储 算法 大数据
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
|
22天前
|
存储 SQL 算法
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II