LeetCode 3Sum Closest
Posted 十目
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 3Sum Closest相关的知识,希望对你有一定的参考价值。
题意很明确,就取数列中每一个点,然后取数列两端边缘与选定点求和,如果比target大就舍弃最右边点,因为有它在和选定点加起来不可能更接近target了。同理比target小就舍弃最左边的店
import static java.lang.StrictMath.abs; import java.util.Arrays; class Solution { public int threeSumClosest(int[] nums, int target) { int len = nums.length,sum = 0; if(len <= 3){ for(int i = 0;i < len;i++) sum += nums[i]; return sum; } sum = nums[0] + nums[1] + nums[2]; Arrays.sort(nums); for(int i = 0;i < len;i++){ if(i >= 1 && (nums[i] == nums[i-1])) continue; int gap2 = abs(target - sum); int l = i + 1,r = len - 1; while(l < r){ if(gap2 > abs(target - nums[i] - nums[l] - nums[r])){ sum = nums[i] + nums[l] + nums[r]; gap2 = abs(target - sum); if(sum == target) return sum; } if(target > nums[i] + nums[l] + nums[r]) l++; else r--; } } return sum; } }
以上是关于LeetCode 3Sum Closest的主要内容,如果未能解决你的问题,请参考以下文章