美文网首页
最接近的三数之和

最接近的三数之和

作者: 最困惑的时候就是能成长的时候 | 来源:发表于2019-04-07 10:27 被阅读0次

题目地址

1.思路

第一步很容易想到的就是降维处理,三个数相当于三维,那么我确定一个数的时候只剩下2维,这样就把问题转化为了两数之和,然后在确定一个数,这个时候就是一个数的比较就比较简单了
随即就想到怎么确定第一个数?

1.暴力法:

遍历整个数组元素,确定第一个数,依次类推可以得到其他维度的数,但是这个算法的时间复杂度是O(n^3),过于高了,在处理数组长度低的情况下还可以处理,但是位数一高就超时


image.png

2.双指针法:

既然暴力法不行那么就得换种思路,首先如果是二数找和的相似应该很好做
就是在一个排好序的数组里面用双指针进行检索


image.png

如果和比较大就让右边的指针左移,如果和比较小就让左边的指针右移,那么这个过程可以应用于2个数,其实3数之和确定一个数就变成了上面的情况,那么怎么确定一个数呢?
我们还是用循环的策略,但是这个循环必须在两边进行,也就是说每次循环必须从0开始或者从nums.length开始,这样就保证了剩下的两个数是可以按照上面的策略进行循环的,


image.png
如果先确定中间将无法保证每次循环都是一个新的数组,其中的某些数组会重复,效率降低

2.代码

public int threeSumClosest(int[] nums, int target) {
        int reminder = Integer.MAX_VALUE,temp=0;
        Arrays.sort(nums);
        for(int i=0;i<nums.length-2;i++){
            int j=i+1,k=nums.length-1;
            while(j<k){
                int threeAddSum = nums[i]+nums[j]+nums[k];
                if(Math.abs(threeAddSum-target)==0){
                    return target;
                }
                if(Math.abs(threeAddSum-target)<reminder){
                    reminder = Math.abs(threeAddSum-target);
                    temp = threeAddSum;
                }
                if(threeAddSum>target){
                    k--;
                }
                if(threeAddSum<target){
                    j++;
                }

            }
        }
        return temp;
    }

相关文章

  • 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...

  • 双指针法(算法)

    案例: 盛最多水的容器、三数之和、最接近的三数之和 双指针法一般对应于有序数组的情况,通过调节指针(左右移动),...

网友评论

      本文标题:最接近的三数之和

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