15. 三数之和 Java
Posted 可持续化发展
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15. 三数之和 Java相关的知识,希望对你有一定的参考价值。
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
双指针算法需要数组有序。
先想一想,暴力怎么做?
再看看,有没有单调性。
如果有单调性的话,就用双指针来做。
当 i 确定之后,双指针 j 、k 。
如何去掉重复的三元组?
枚举 i 的时候,如果当前 nums[i] = 上一个 nums[i] 的值,就跳过,直到 nums[i] 不等于为止。因为在上一个 nums[i] 的时候,已经找出了nums[i] 对应的所有三元组的情况。
i 、j 都要判同。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++){
if (i > 0 && nums[i] == nums[i - 1]) continue;
for (int j = i + 1, k = nums.length - 1; j < k; j++){
if (j > i +1 && nums[j] == nums[j - 1]) continue;
while (j < k - 1 && nums[i] + nums[j] + nums[k - 1] >=0) k--;
if (nums[i] + nums[j] +nums[k] == 0){
res.add(Arrays.asList(new Integer[]{nums[i],nums[j],nums[k]}));
}
}
}
return res;
}
}
以上是关于15. 三数之和 Java的主要内容,如果未能解决你的问题,请参考以下文章