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

【leetcode】16. 3Sum Closest

时间:2016-07-03 07:02:10      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

解题方法:

这道题与15题解题方法思路一致。只是多了一个比较是否是最小差值的步骤.

具体代码:

 1 public class Solution {
 2    
 3     public static int threeSumClosest(int[] nums, int target) {
 4         List<List<Integer>> results = new ArrayList<List<Integer>>();
 5         if(nums.length<3){
 6             //results.add(new ArrayList<Integer>());
 7             return Integer.MAX_VALUE;
 8         }
 9         if(nums.length==3){
10             return nums[0]+nums[1]+nums[2];
11         }
12         int result=Integer.MAX_VALUE;
13         int min=Integer.MAX_VALUE;
14         Arrays.sort(nums);
15         for(int i=0;i<nums.length-2;i++){
16             for(int j=i+1;j<nums.length-1;j++){
17                 for(int index=j+1;index<nums.length;index++){
18                     int sum = nums[i]+nums[j]+nums[index];
19                     int dif = Math.abs(sum-target);
20                     if(dif==0)
21                         return sum;
22                     if(dif<min){
23                         min=dif;
24                         result=sum;
25                     }
26                     //如果sum已经大于target了,则继续往后找第三个数的位置就没有任何意义了。(也是为了充分利用数组有序性)
27                     if(nums[index]>0 && sum>target)
28                         break;
29                         //元素有重复的情况
30                     while(index+1<nums.length && nums[index+1]==nums[index]){
31                         index++;
32                     }
33                 }
34                 //元素有重复的情况
35                 while(j+1<nums.length-1 && nums[j+1]==nums[j]){
36                     j++;
37                 }
38             }
39             //元素有重复的情况
40             while(i+1<nums.length-2 && nums[i+1]==nums[i]){
41                 i++;
42             }
43         }
44         return result;
45         
46     }
47 
48 }

 

【leetcode】16. 3Sum Closest

标签:

原文地址:http://www.cnblogs.com/godlei/p/5636469.html

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