• 最接近的三数之和


    题目:

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

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

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

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number}
     */
    var threeSumClosest = function(nums, target) {
        let min=9999999999;
        let sum=0;
        for(let i=0;i<nums.length;i++){
            for(let j=i+1;j<nums.length;j++){
                for(let k=j+1;k<nums.length;k++){
                    if(min>Math.abs(nums[i]+nums[k]+nums[j]-target)){
                        min = Math.abs(nums[i]+nums[k]+nums[j]-target);
                        sum = nums[i]+nums[k]+nums[j];
                    }
                }
            }
        }
        return sum;
    };

    实现方式:直接三个循环找到相差最小的返回即可。

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number}
     */
    function comp(a,b){
        return a-b;
    }
    var threeSumClosest = function(nums, target) {
        nums.sort(comp);
        let ans = nums[0]+nums[1]+nums[2];
        
        for(let i=0;i<nums.length;i++){
             let left = i+1;
             let right = nums.length-1;
            while(left<right){
               let  sum = nums[i]+nums[left]+nums[right];
                if(Math.abs(target-sum)<Math.abs(target-ans)){
                    ans = sum ;
                }else if(sum>target){
                    right--;
                }else if(sum<target){
                    left++;
                }else{
                    return ans;
                }
            }
        }
        return ans;
    };
    View Code

    实现方式:双指针,先进行排序,排序后,假设差距最小的数据是ans,设置一个外层for循环,内部通过双指针,先求出当前指向的三个数的和sum,并判断是sum与target的距离小呢还是ans与sum的距离小呢,如果是sum的比ans的距离小就将ans设置为sum的值,那就判断sum的大于target呢还是小于呢,如果是等于直接返回就可以了,没有比这更小的距离了,如果是大于,说明right指向的数有点大,所有将right--,如果是小于,说明left指向的数据有点小,所以可以将left++,当left>=right,也就是Left和right重合的时候将停止判断。i++.最后一直如此循环,最终返回差距最小的数据。

    昨天的三数之和也是适用的双指针算法求得,https://www.cnblogs.com/panjingshuang/p/11632089.html

    来源:https://leetcode-cn.com/problems/3sum-closest/solution/hua-jie-suan-fa-16-zui-jie-jin-de-san-shu-zhi-he-b/
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/3sum-closest
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    【ALearning】第三章 Android基本常见控件
    【问题汇总】ListView的FooterView设置可见性的问题
    shell重定向调试信息
    Android提供的系统服务之--TelephonyManager(电话管理器)
    工作一年的总结
    【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】
    未定义标识符_ConnectionPtr
    POJ 1329 三角外接圆
    IOS开发-加载本地音乐
    SQL Server 性能优化3 该指数(Index)保养
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11637588.html
Copyright © 2020-2023  润新知