【每日一题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)
目录
相关文章
LeetCode: 16. 最接近的三数之和 | 双指针专题
【LeetCode: 16. 最接近的三数之和 | 双指针专题 】
56 1
【LeetCode16】最接近的三数之和(双指针)
和leetcode15三数之和类似,三层循环时间复杂度O ( n 3 ) O(n^3)O(n 3 )过高,使用双指针虽说不能马上降到O ( n ) O(n)O(n),但就是这类题的常用套路: 遍历一遍数组元素,当前元素为num[i];
109 0
【LeetCode16】最接近的三数之和(双指针)
力扣每日一题:16.最接近的三数之和 双指针解法
力扣每日一题:16.最接近的三数之和 双指针解法
103 0
|
5月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
22天前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
19 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
3月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
|
3月前
|
C语言
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
|
3月前
|
存储 编译器 C语言
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)
【C初阶——指针3】鹏哥C语言系列文章,基本语法知识全面讲解——指针(3)
|
4月前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下