资讯动态

LeetCode hot100——15.三数之和

发布时间:2026/9/12 17:40:20 来源:尧图企业网站定制
题目给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意答案中不可以包含重复的三元组。示例 1输入nums [-1,0,1,2,-1,-4]输出[[-1,-1,2],[-1,0,1]]解释nums[0] nums[1] nums[2] (-1) 0 1 0 。nums[1] nums[2] nums[4] 0 1 (-1) 0 。nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。注意输出的顺序和三元组的顺序并不重要。示例 2输入nums [0,1,1]输出[]解释唯一可能的三元组和不为 0 。示例 3输入nums [0,0,0]输出[[0,0,0]]解释唯一可能的三元组和为 0 。提示3 nums.length 3000-105 nums[i] 105题解class Solution { public ListListInteger threeSum(int[] nums) { ListListInteger res new ArrayList(); if(nums null || nums.length 3) return res; int len nums.length; Arrays.sort(nums); for(int i 0;i len;i){ if(nums[i] 0) break;//三者中nums[i]最小大于零不可能得到sum等于零,直接跳出循环 if(i 0 nums[i] nums[i - 1]) continue; // 去重 int l i 1; int r len - 1; while(l r){ int sum nums[i] nums[l] nums[r]; if(sum 0){ res.add(List.of(nums[i],nums[l],nums[r])); while (lr nums[l] nums[l1]) l; // 去重 while (lr nums[r] nums[r-1]) r--; // 去重 l; r--; } else if(sum 0) l; else if(sum 0) r--; } } return res; } }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价