标签:array two points 遍历
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.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
与3SUM不同的是 不一定是有与target匹配的值 而是要寻找最接近的 显然要全部遍历 与3sum思想差不多 将火速组排序后 先枚举第一个数 然后在它后面的区间里 用头尾指针确定剩余两数 代码如下:
public class Solution { public int threeSumClosest(int[] num, int target) { if(num.length<=2)return 0; int res=0; Arrays.sort(num); boolean flag=true; for(int i=0;i<num.length-2;i++){ int left=i+1; int right=num.length-1; while(left<right){ int sum=num[left]+num[right]+num[i]; if(flag==true){ res=sum; flag=false; } else{ if(Math.abs(sum-target)<Math.abs(res-target)){ res=sum; } } if(sum<target){ left++; } if(sum>target){ right--; } if(sum==target){ return target; } } } return res; } }
标签:array two points 遍历
原文地址:http://blog.csdn.net/u012734829/article/details/44060059