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; } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步