码迷,mamicode.com
首页 > 其他好文 > 详细

16. 3Sum Closest

时间:2018-08-02 22:59:14      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:inf   result   ima   alt   分享   ||   com   math   遍历数组   

一、题目

  1、审题

    技术分享图片

 

  2、分析:

    给出一个数字数组,求其中三个元素的和让其最接近 target。

 

二、解答

  1、分析:

    a、将数组 nums 排序,遍历数组中元素;

    b、遍历下标为 i 的元素时,取 low 指针指向下标为 i + 1 的元素, high 指向数组最后一个元素下标;

    c、循环判断 当 low < high 时,令 sum = nums[i] + nums[low] + nums[high] ,比较 sum 是否最接近 target;    

      若  sum = target , 则返回 target;  

      若 sum > target, 则 high--;

      否则, low--;

class Solution {
    public int threeSumClosest(int[] nums, int target) {

        if(nums.length == 0)
            return 0;

        Arrays.sort(nums);
        int result = nums[0] + nums[1] + nums[2];
        for (int i = 0; i < nums.length - 2; i++) {

            // if(nums[i] > target)
            //     break;

            int low = i + 1, high = nums.length - 1;
            if((i > 0 && nums[i] != nums[i-1]) || i == 0) {

                while(low < high) {
                    int sum = nums[i] + nums[low] + nums[high];
                    if (sum - target == 0)
                        return target;

                    if(Math.abs(sum - target) < Math.abs(result - target))
                        result = sum;

                    if (sum - target < 0)
                        low++;
                    else
                        high--;
                }
            }

        }

        return result;
    }
}

 

16. 3Sum Closest

标签:inf   result   ima   alt   分享   ||   com   math   遍历数组   

原文地址:https://www.cnblogs.com/skillking/p/9409794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!