publicintthreeSumClosest(int[] nums, int target){ int len=nums.length; if (nums==null||len<3)thrownew IllegalArgumentException("error of argument!"); // 用list保存所有的三数之和 List<Integer> list=new ArrayList<>(); for (int i=0;i<len;i++){ for (int j=i+1;j<len;j++){ for (int k=j+1;k<len;k++){ list.add(nums[i]+nums[j]+nums[k]); } } } // 遍历list找出最接近target的数 int ans=list.get(0); for (Integer i : list) { if (Math.abs(target-ans)>Math.abs(target-i)) ans=i; } return ans; }
publicintthreeSumClosest(int[] nums, int target){ int len= nums.length,ans=nums[0]+nums[1]+nums[2]; if (nums==null||len<3)thrownew IllegalArgumentException("error of argument!"); // 对数组排序 Arrays.sort(nums); // 依次遍历每个元素nums[i] for (int i=0;i<len;i++){ // 然后用前后指针L和R分别指向nums[i]后面部分的开头和结尾 int L=i+1; int R=len-1; while (L<R){ int sum=nums[i]+nums[L]+nums[R]; if (Math.abs(target-ans)>Math.abs(target-sum)){ ans=sum; } if (sum==target){//如果sum==target,那就已经找到最接近target的三数之和 return ans; }elseif (sum<target){//如果sum<target,说明需要大一点的数来组合,即L++ L++; }elseif (sum>target){//如果sum<target,说明需要小一点的数来组合,即R--; R--; } } } return ans; }