本文共 2131 字,大约阅读时间需要 7 分钟。
三数之和问题可以通过两指针法高效解决,以下是详细的解决方案:
给定一个已经排好序的数组,找出所有满足三个数之和为零的三元组。我们可以使用两指针法来解决这个问题,具体步骤如下:
import java.util.ArrayList;import java.util.List;public class Solution { public List > threeSum(int[] nums) { List > listAll = new ArrayList<>(); if (nums.length < 3) { return listAll; } int len = nums.length; for (int i = 0; i < len; i++) { if (nums[i] > 0) { break; } List list = new ArrayList<>(); int left = i + 1; int right = len - 1; if (i > 0 && nums[i] == nums[i - 1]) { continue; } while (left < right) { int sum = nums[i] + nums[left] + nums[right]; if (sum == 0) { list.add(nums[i]); list.add(nums[left]); list.add(nums[right]); listAll.add(list); // 处理重复元素 while (left < right && nums[left + 1] == nums[left]) { left++; } while (left < right && nums[right - 1] == nums[right]) { right--; } } else if (sum < 0) { left++; } else { right--; } } } return listAll; }}
listAll来存储结果,检查数组长度是否小于3,若是则返回空列表。这种方法的时间复杂度为O(n),空间复杂度为O(1),能够高效解决问题。
转载地址:http://dheq.baihongyu.com/