美文网首页阅读推荐悦读
LeetCode-Algorithms-16.最接近的三数之和(

LeetCode-Algorithms-16.最接近的三数之和(

作者: lwyingyyy | 来源:发表于2019-06-14 15:42 被阅读4次

1. 题目描述

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

2. 提交记录

16.最接近的三数之和

3. 算法思想

为了能够找出与 target 最接近的整数和,需要先对数组 nums 进行排序。
看到题目,我最先想到的是暴力解决,三层 for 循环,但是这种方法显然不是最好的,因为时间复杂度比较高O(n3).之前在评论区看过双指针法,做了“三数之和”这道题,我真的是要实名夸赞这种解法,所以这次也毫不犹豫选择了双指针法。算法思想如下:

先给整数和sum赋一个初始值 sum = nums[0]+nums[1]+nums[2];

在for循环中设置左指针 left = i+1 ; 右指针 right 指向数组最后一位 right = numsSize-1;

需要注意的是为了能够找出与 target 最接近的整数和,需要对每个整数和进行比较,选出最接近 target 的结果。

4. 代码实现

int threeSumClosest(int* nums, int numsSize, int target){
    //从小到大排序
    int temp = 0;
    for(int i=0;i <= numsSize-2;i++){
        for(int j=i+1;j <= numsSize-1;j++){
            if(nums[i] > nums[j]){
                temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }
    //双指针
    int left,right,sum = nums[0]+nums[1]+nums[2];
    for(int i = 0;i< numsSize-2;i++){        
        left = i+1;
        right = numsSize-1;                
        while(left < right){
            temp = nums[i]+nums[left]+nums[right];
            if(temp > target){
                right--; 
            }else if(temp < target){
                left++;
            }else{
                return temp;
            }
            if(fabs(temp-target) < fabs(sum-target)){
                sum = temp;
            }      
        }        
    }
    return sum;
}

相关文章

  • LeetCode-Algorithms-16.最接近的三数之和(

    1. 题目描述 2. 提交记录 3. 算法思想 为了能够找出与 target 最接近的整数和,需要先对数组 num...

  • algrithrom

    求和问题,双指针解决 done 两数之和 三数之和 最接近三数之和 四数之和 链表反转问题 done 链表反转 链...

  • LeetCode-16 最接近的三数之和

    题目:16. 最接近的三数之和 难度:中等 分类:数组 解决方案:双指针 今天我们学习第16题最接近的三数之和,这...

  • 双指针总结

    左右指针 主要解决数组中的问题:如二分查找 盛最多水的容器 三数之和 四数之和 最接近三数之和 快慢指针 主要解决...

  • LeetCode练习day1-数组相关

    LeetCode16 最接近的三数之和 相似题目:LeetCode15 三数之和 题目详情 给你一个长度为 n 的...

  • 最接近的三数之和

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum...

  • 最接近的三数之和

    题目 思路 题解

  • 最接近的三数之和

    题目地址 1.思路 第一步很容易想到的就是降维处理,三个数相当于三维,那么我确定一个数的时候只剩下2维,这样就把问...

  • 最接近的三数之和

    leetcode 16 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中...

  • 最接近的三数之和

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum-c...

网友评论

    本文标题:LeetCode-Algorithms-16.最接近的三数之和(

    本文链接:https://www.haomeiwen.com/subject/bvrpfctx.html