LeetCode(16) - 3Sum Closest

  这一题和leetCode(15)的3sum基本上一个思路 —— two pointer。而且题目保证只有有一个答案,所以还不需要考虑重复的问题,只需要维护一个与target差值最小的closeDistance,以及对应的数组上的值就好。

  代码如下:

  

 1 public class Solution {
 2     public int threeSumClosest(int[] nums, int target) {
 3         //先排序
 4         Arrays.sort(nums);
 5         int minDistance = Integer.MAX_VALUE;
 6         int result = 0;
 7         for (int i = 0; i < nums.length;i++) {
 8             int head = i + 1;
 9             int tail = nums.length - 1;
10             while(head < tail) {
11                 int sum = nums[i] + nums[head] + nums[tail];
12                 int currDis = Math.abs(sum - target);
13                 //判断当前差值是否比最小差值要小,如果是,则更新minDistance和result
14                 if (currDis <= minDistance) {
15                     result = sum;
16                     minDistance = currDis;
17                 }
18                 if (sum < target) head++;
19                 else if (sum > target) tail--;
20                 //差值为0,已经是最小,故直接返回
21                 else return sum;
22             }
23         }
24         return result;
25     }
26 }

 

转载于:https://www.cnblogs.com/kepuCS/p/5271549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值