给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j
、i != k
且 j != k
,同时还满足 nums[i] + nums[j] + nums[k] == 0
。请
你返回所有和为 0
且不重复的三元组。
注意:答案中不可以包含重复的三元组。
解题思路:
本题的关键是如何去重。
- public static List
> threeSum(int[] nums) {
- int left,right,sum;
- int len=nums.length;
- List
> result=new ArrayList<>();
- Arrays.sort(nums); //对数组进行排序
-
- for(int i=0;i
- //nums[i]大于0时,不可能组成三元组
- if (nums[i] > 0) {
- return result;
- }
-
- if(i>0 && nums[i]==nums[i-1]){ //对a去重
- continue;
- }
-
- left=i+1;
- right=len-1;
- while (left
- sum=nums[i]+nums[left]+nums[right];
- //满足条件
- if(sum<0){
- left++;
- }else if(sum>0){
- right--;
- }else{
- List list=new ArrayList<>();
- list.add(nums[i]);
- list.add(nums[left]);
- list.add(nums[right]);
- result.add(list);
- //result.add(Arrays.asList(nums[i],nums[left],nums[right]));
- // 对b、c去重
- while (right > left && nums[right] == nums[right - 1]) right--;
- while (right > left && nums[left] == nums[left + 1]) left++;
- left++;
- right--;
- }
- }
- }
- return result;
- }
-
相关阅读:
Unreal地形高级材质之根据斜率分配材质
一文读懂OpenAI文生视频模型Sora原理
基于YOLOv3的口罩佩戴检测
map和set
.NET vs .NET Framework vs vs .NET Standard
【Node.js】path模块处理路径问题
Nacos 小bug: application.properties配置未生效,导致端口未生效
python使用Augmentor对图像分割数据集中原图和标签mask同时进行变换
【每日一题】744. 寻找比目标字母大的最小字母
MyBatis篇---第四篇
-
原文地址:https://blog.csdn.net/xiao_xiao_wang_/article/details/133942931