太原网站建设随州wordpress 去除右边
ps:题目来自力扣
最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
import java.util.Arrays;class Solution {public int threeSumClosest(int[] nums, int target) {// 首先对数组进行排序,方便后续使用双指针法Arrays.sort(nums);int n = nums.length;// 初始化最接近的和为数组前三个元素的和int closestSum = nums[0] + nums[1] + nums[2];// 遍历数组,固定第一个数for (int i = 0; i < n - 2; i++) {int left = i + 1;int right = n - 1;while (left < right) {// 计算当前三个数的和int currentSum = nums[i] + nums[left] + nums[right];// 如果当前和等于目标值,直接返回该和if (currentSum == target) {return currentSum;}// 比较当前和与目标值的距离和之前最接近和与目标值的距离if (Math.abs(currentSum - target) < Math.abs(closestSum - target)) {closestSum = currentSum;}// 根据当前和与目标值的大小关系移动指针if (currentSum < target) {left++;} else {right--;}}}return closestSum;}
}

代码解释
本题要求从给定的整数数组 nums 中选出三个整数,使它们的和与目标值 target 最接近,并返回这三个数的和。我们可以采用排序加双指针的方法来解决。
具体步骤
- 数组排序:
- 使用
Arrays.sort(nums)对数组进行排序,这样便于后续使用双指针法调整元素组合。
- 使用
- 初始化最接近的和:
- 把
closestSum初始化为数组前三个元素的和,后续会不断更新它。
- 把
- 遍历数组固定第一个数:
- 通过
for循环遍历数组,直到倒数第三个元素,固定nums[i]作为三个数中的第一个数。
- 通过
- 双指针查找另外两个数:
- 初始化左指针
left为i + 1,右指针right为数组的最后一个元素。 - 在
while循环中,只要left小于right就继续:- 计算当前三个数的和
currentSum。 - 如果
currentSum等于target,直接返回currentSum。 - 比较
currentSum与target的距离和closestSum与target的距离,若currentSum更接近,则更新closestSum。 - 根据
currentSum与target的大小关系移动指针:- 若
currentSum小于target,将left指针右移以增大和。 - 若
currentSum大于target,将right指针左移以减小和。
- 若
- 计算当前三个数的和
- 初始化左指针
- 返回结果:
- 遍历结束后,
closestSum即为最接近目标值的三个数的和,将其返回。
- 遍历结束后,
