Java 实现三数之和最接近目标值算法
Java 实现三数之和最接近目标值算法/n/n给定一个长度为 n 的整数数组 nums 和一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。/n/n### 代码实现/n/njava/nimport java.util.Arrays;/n/npublic class Solution {/n public int threeSumClosest(int[] nums, int target) {/n Arrays.sort(nums);/n int result = nums[0] + nums[1] + nums[2];/n for (int i = 0; i < nums.length - 2; i++) {/n int left = i + 1, right = nums.length - 1;/n while (left < right) {/n int sum = nums[i] + nums[left] + nums[right];/n if (sum == target) {/n return sum;/n }/n if (Math.abs(sum - target) < Math.abs(result - target)) {/n result = sum;/n }/n if (sum > target) {/n right--;/n } else {/n left++;/n }/n }/n }/n return result;/n }/n}/n/n/n### 算法思路/n/n1. 首先对数组进行排序,方便后续使用双指针法。/n2. 遍历排序后的数组,对于每个数字 nums[i],使用双指针法在其后面的数组中找到和它最接近的两个数字 nums[left] 和 nums[right]。/n3. 计算三个数字的和 sum,并更新最终结果 result。/n4. 如果 sum 大于 target,则将 right 指针向左移动;否则将 left 指针向右移动。/n/n### 复杂度分析/n/n- 时间复杂度:排序需要 $O(n /log n)$ 时间,双指针遍历需要 $O(n^2)$ 时间,因此总的时间复杂度为 $O(n^2)$。/n- 空间复杂度:排序需要 $O(1)$ 的额外空间,双指针法也只需要 $O(1)$ 的额外空间,因此总的空间复杂度为 $O(1)$。/n
原文地址: https://www.cveoy.top/t/topic/opeO 著作权归作者所有。请勿转载和采集!