public class S016 {//借鉴S015的思想,只是稍微有点慢public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int result = nums[0]+nums[1]+nums[nums.length-1];for(int i =0;i<nums.length;i++){if(i>0&&nums[i]==nums[i-1])continue;int left = i+1;int right = nums.length-1;while(left<right){if(nums[i]+nums[left]+nums[right]==target){result = nums[i]+nums[left]+nums[right];return result;//如果只是break;会产生不必要的for循环,影响速度}else{result = Math.abs(nums[i]+nums[left]+nums[right]-target)<Math.abs(result-target)?(nums[i]+nums[left]+nums[right]):result; if(nums[i]+nums[left]+nums[right]<target){left++;while(left<right&&nums[left] == nums[left-1]){left++;} }else if(nums[i]+nums[left]+nums[right]>target){right--;while(left<right&&nums[right] == nums[right+1]){right--;} }}}}return result;} }