力扣---三数之和(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]
输出:[]

思路描述:

先排序,保证有序,然后找到所有的三个元素的组合,再去重。

代码:

java 复制代码
class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        int n=nums.length;
        Arrays.sort(nums);
        Set<List<Integer>> set=new HashSet<>();
        for(int i=0;i<n;i++){
            List<Integer> list=new LinkedList<>();
            int left=i+1;
            int right=n-1;
            while (left<right){
                if(nums[left]+nums[right]+nums[i]>0){
                    right--;
                } else if (nums[left] + nums[right] + nums[i] < 0) {
                    left++;
                }else{
                    list.add(nums[i]);
                    list.add(nums[left]);
                    list.add(nums[right]);
                    set.add(list);
                    list=new LinkedList<>();
                    left++;
                    right--;
                }
            }
        }
        return new LinkedList<>(set);
    }
}
相关推荐
POLITE39 分钟前
Leetcode 19. 删除链表的倒数第 N 个结点 JavaScript (Day 11)
javascript·leetcode·链表
liu****12 分钟前
机器学习-线性回归
人工智能·python·算法·机器学习·回归·线性回归
智者知已应修善业20 分钟前
【数组删除重复数据灵活算法可修改保留重复数量】2024-3-4
c语言·c++·经验分享·笔记·算法
你怎么知道我是队长35 分钟前
C语言---字符串
java·c语言·算法
你怎么知道我是队长1 小时前
C语言---指针
c语言·数据结构·算法
汉克老师1 小时前
GESP2025年12月认证C++五级真题与解析(编程题2 (相等序列))
c++·算法·贪心算法·中位数·质数分解
前端小L1 小时前
双指针专题(九):谁是窗口里的老大?——「滑动窗口最大值」
javascript·算法·双指针与滑动窗口
CAU界编程小白1 小时前
Linux系统编程系列之模拟文件操作
linux·算法
萤虫之光2 小时前
有序数组中的单一元素(一)
数据结构·算法
颜酱2 小时前
从经典问题入手,吃透动态规划核心(DP五部曲实战)
前端·javascript·算法