LeeCode: 3Sum Closest
跟3sum题差不多,可以refer那题
C++:
1 class Solution { 2 public: 3 int threeSumClosest(vector<int> &num, int target) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 int maxgap = INT_MAX; 7 int maxclose; 8 sort(num.begin(), num.end()); 9 for (int i = 0; i < num.size()-2; i++) { 10 int beg = i+1; 11 int end = num.size()-1; 12 while (beg < end) { 13 int sum = num[i] + num[beg] + num[end]; 14 if (sum == target) return target; 15 if (abs(sum - target) < maxgap) { 16 maxgap = abs(sum - target); 17 maxclose = sum; 18 } 19 if (sum < target) beg++; 20 else end--; 21 } 22 } 23 return maxclose; 24 } 25 };
java:
1 public class Solution { 2 public int threeSumClosest(int[] nums, int target) { 3 Arrays.sort(nums); 4 int minDis = Integer.MAX_VALUE; 5 int ans = nums[0]; 6 for (int i = 0; i < nums.length; i++) 7 { 8 if (i > 0 && nums[i] == nums[i-1]) continue; 9 int left = i + 1; 10 int right = nums.length - 1; 11 while (left < right) 12 { 13 if (left > i + 1 && nums[left] == nums[left-1]) 14 { 15 left++; 16 continue; 17 } 18 int sum = nums[i] + nums[left] + nums[right]; 19 if (Math.abs(target-sum) < minDis) { 20 ans = sum; 21 minDis = Math.abs(target - sum); 22 } 23 if (sum == target) break; 24 else if (sum > target) right--; 25 else left++; 26 } 27 } 28 return ans; 29 } 30 }