LeetCode 剑指 Offer II 007. 数组中和为 0 的三个数
题目描述
给定一个包含 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]]
LeetCode 剑指 Offer II 007. 数组中和为 0 的三个数
提示:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
int len = nums.length;
if(len < 3 || nums == null || nums[0] > 0){return result;}
for(int first = 0;first < len;first++){
int third = len - 1;
int target = - nums[first];
if (first > 0 && nums[first] == nums[first - 1]) {continue;}
for(int second = first + 1; second< len;second++){
if (second > first + 1 && nums[second] == nums[second - 1]) {continue;}
while(second < third && nums[second] + nums[third] > target){third--;}
if (second == third) {break;}
if( nums[first] + nums[second] + nums[third] == 0){
List<Integer> list = new ArrayList<>();
list.add(nums[first]);
list.add(nums[second]);
list.add(nums[third]);
result.add(list);
}
}
}
return result;
}
}
2.知识点
很经典的三数之和。比较考察基本功 需要也别注意数据判重复