一:解题思路
Time:O(n^2),Sapce:O(1)
之前做过一道求3个数的和等于0的组合,解题方法与这个题目几乎一样。
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { int minValue = 2147483647; int result = 0; sort(nums.begin(),nums.end()); for (int k = nums.size() - 1; k >= 2; k--) { int i = 0, j = k - 1; while (i < j) { int sum = nums[i] + nums[j] + nums[k]; if (sum == target) return sum; else if (sum < target) i++; else j--; int diff = abs(sum-target); if (diff < minValue) { minValue = diff; result = sum; } } } return result; } };
Java:
class Solution { public int threeSumClosest(int[] nums, int target) { int result=0; int minValue=Integer.MAX_VALUE; Arrays.sort(nums); for(int k=nums.length-1;k>=2;k--) { int i=0,j=k-1; while (i<j) { int sum=nums[i]+nums[j]+nums[k]; if(sum==target) return sum; else if(sum<target) i++; else j--; int diff=Math.abs(sum-target); if(diff<minValue) { minValue=diff; result=sum; } } } return result; } }
原文:https://www.cnblogs.com/repinkply/p/12715100.html