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

2018.9.30 LeetCode 刷题日记 第16题

时间:2018-09-30 15:02:18      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:public   integer   暴力   etc   数加   最小数   sum   length   array   

第 16 题  最接近目标数的三数之和

 

对一个数组来说,找出其中的三个数,使得三数之和与target最接近,最先想到的是暴力法求解,对i = 0; j = i+ 1; k = j+1;进行三重遍历,记录对target距离的最小值,但是三重循环,时间复杂度0(n3)。

 

改进 : 对寻求目标数来说,三数之和要么比target 大 ,要么比target小,确定寻找方向很重要,可以对数组进行先排序,再找寻正确组合

首先,排序好的数组可以从两侧向中间逼近,最小数和最大数加和,如果和比target大,可以从排序右侧向中间调节,反之从排序向左侧调节,同时注意保证左侧索引值比右侧小,其中若找到和target相等的三数之和,则可以直接返回,因为此时距离为0.

class Solution {
  public int threeSumClosest(int[] nums, int target) {
    int min = Integer.MAX_VALUE;
    int dis = 0;
    Arrays.sort(nums);
    int i = 0;
    int j = 0;
    int k = 0;
    for( i = 0; i < nums.length-2; i++){
      for(j = i+1, k = nums.length-1; j < k; ){
        dis =(nums[i] + nums[j] + nums[k]);
        if(Math.abs(dis-target) < Math.abs(min)){
        min = dis - target;
       }
      if(j < k && dis < target){
          j++;
      }else if(j < k && dis > target){
          k--;
      } else return target;
    }
  }
    return min+target;
  }
}

2018.9.30 LeetCode 刷题日记 第16题

标签:public   integer   暴力   etc   数加   最小数   sum   length   array   

原文地址:https://www.cnblogs.com/tiansiyuan-program/p/9728889.html

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