最接近的三数之和

题目:

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

思路:

1.排序
2.三数之和大于target--->r--
3.三数之和小于target--->l++
4.根据与target的大小比较来判断走向,然后更新左右索引,最后返回这三个数的和。

 public static int threeSumClosest(int[] nums, int target) {

        int len = nums.length;
        int ans = nums[0] + nums[1] + nums[2];//存储结果

        Arrays.sort(nums); // 排序
        //三数之和大于target--->r--
        //三数之和小于target--->l++
        //根据与target的大小比较来判断走向,然后更新ans(差值),返回这三个数的和

        for (int i = 0; i < len-2 ; i++) {
            int L = i+1;
            int R = len-1;
            while(L < R){
                int sum = nums[i] + nums[L] + nums[R];
                if(sum == target){//说明刚好相等,这个时候一定是最优解
                    ans = sum;
                    break;
                } else if (sum < target){
                    ans = Math.abs(sum-target) > Math.abs(ans-target)? ans:sum;
                    while (L<R && nums[L] == nums[L+1]) L++;
                    L++;
                } else {
                    ans = Math.abs(sum-target) > Math.abs(ans-target)? ans:sum;
                    while (L<R && nums[R] == nums[R-1]) R--;
                    R--;
                }
            }
        }
        return ans;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
可爱的牛油果在求佛:我觉得很不错,我通过这份简历,看到的是一个学历不错,经历也有,生活也自律的积极青年,有培养潜力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务