leetcode 三数之和 java简单解法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

leetcode 三数之和 java简单解法
LeetCode 上的「三数之和」问题(3Sum)要求找出数组中所有不重复的三元组,使得三个数的和为零。

以下是 Java 中的一种简单解法:
import java.util.*;
public class ThreeSum {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
// 先对数组进行排序
Arrays.sort(nums);
// 遍历数组
for (int i = 0; i < nums.length - 2; i++) {
// 避免重复计算相同的值
if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
int left = i + 1;
int right = nums.length - 1;
int target = -nums[i]; // 找到的目标值
// 使用双指针法在剩余区间内寻找两数之和等于目标值的组合
while (left < right) {
if (nums[left] + nums[right] == target) {
result.add(Arrays.asList(nums[i], nums[left], nums[right]));
// 避免重复计算相同的值
while (left < right && nums[left] == nums[left + 1]) {
left++;
}
while (left < right && nums[right] == nums[right - 1]) {
right--;
}
left++;
right--;
} else if (nums[left] + nums[right] < target) {
left++;
} else {
right--;
}
}
}
}
return result;
}
public static void main(String[] args) {
ThreeSum solution = new ThreeSum();
int[] nums = {-1, 0, 1, 2, -1, -4};
List<List<Integer>> result = solution.threeSum(nums);
// 打印结果
for (List<Integer> triplet : result) {
System.out.println(triplet);
}
}
}
这段代码首先对输入的整数数组进行排序,然后使用双指针法在数组中寻找三个数之和为零的组合。

在循环过程中,利用左右两个指针指向数组中的元素,不断移动这两个指针,以逐步逼近目标值。

在找到满足条件的组合后,避免重复计算相同的值,保证了结果集中不包含重复的三元组。

以上代码是对 LeetCode 上「三数之和」问题的一种简单解法,可以在给定的数组中找出所有满足条件的不重复三元组。

相关文档
最新文档