【每日一题Day261】LC16最接近的三数之和 | 双指针

简介: 【每日一题Day261】LC16最接近的三数之和 | 双指针

最接近的三数之和【LC16】

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

x数之和总结,可以看看其他类似题目

难道明天是LC259?

2023/1/14

  • 思路:
  • 搜索三数之和的过程与LC15相同:首先对数组进行排序,然后遍历数组,在确定nums[i]的情况下,在数组nums[i+1,n-1]中使双指针法(前后指针),确定另外两个元素,判断这三个元素之和sumtarget的大小:
  • sum>target左移左指针,使sum减小
  • 如果sum<target右移右指针,使sum增大
  • 如果sum==target添加三元组至结果集
  • 不同之处为更新结果的条件变为如果sum更接近target那么更新sum。如果sum==target,那么可以直接返回target。本题不去重也不影响结果
  • 本题只需要找到最接近的和,因此去重不是必须的
  • 实现
// 2023/7/10
class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int n = nums.length ;
        int res = Integer.MAX_VALUE;
        for (int i = 0; i < n - 2; i++){
            int l = i + 1, r = n - 1;
            if (i > 0 && nums[i] == nums[i - 1]){
                continue;
            }
            while (l < r){
                int sum = nums[i] + nums[l] + nums[r];
                if (Math.abs(sum - target) < Math.abs(res - target)){
                    res = sum;
                }
                if (sum == target){
                    return target;
                }else if(sum > target){
                    r--;
                }else{
                    l++;
                }
            }
        }
        return res;
    }
}

复杂度

  • 时间复杂度:O(nlogn+n2)其中 n是数组的长度。排序所需的时间复杂度一般为O(nlogn)查找三元组的时间复杂度为O(n2)因此时间复杂度为O(n2)
  • 空间复杂度:O(1)
目录
相关文章
|
12月前
LeetCode: 16. 最接近的三数之和 | 双指针专题
【LeetCode: 16. 最接近的三数之和 | 双指针专题 】
41 1
【LeetCode16】最接近的三数之和(双指针)
和leetcode15三数之和类似,三层循环时间复杂度O ( n 3 ) O(n^3)O(n 3 )过高,使用双指针虽说不能马上降到O ( n ) O(n)O(n),但就是这类题的常用套路: 遍历一遍数组元素,当前元素为num[i];
92 0
【LeetCode16】最接近的三数之和(双指针)
力扣每日一题:16.最接近的三数之和 双指针解法
力扣每日一题:16.最接近的三数之和 双指针解法
91 0
|
4天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
4天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
4天前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
4天前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
6天前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
9天前
|
C语言
C语言----深入理解指针(5)(一)
C语言----深入理解指针(5)
14 2
|
9天前
|
C语言
C语言---深入指针(4)(二)
C语言---深入指针(4)
17 2