leetcode刷题(数组list)8—三数之和

博客分析了LeetCode第15题——三数之和的问题,探讨如何找到数组中和为0的不重复三元组。内容涉及数组列表的处理和算法设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

15. 三数之和

分析

在这里插入图片描述

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //时间复杂度O(n^2)
         List<List<Integer>> res = new ArrayList<List<Integer>>();
        int p,q,k;
        if(nums.length < 3)
            return res;
        //先排序
        Arrays.sort(nums, 0, nums.length);
       for(p = 0;p < nums.length - 2; ++p){
           //最外层定一个从左向右遍历
           //另两个变量相互夹逼找结果
           if(p - 1 >= 0 && nums[p] == nums[p - 1])
                continue; 
           q = nums.length - 1;
           k = p + 1;
           while(k < q){
                if(nums[p] + nums[q] + nums[k] > 0){
               --q;
               while(q > p + 1 && nums[q] == nums[q + 1])
                 --q;
           }else{
               if(nums[p] + nums[q] + nums[k] < 0){
                    ++k;
                    while(k < q && nums[k] == nums[k - 1])
                        ++k;
               }else{
                   List<Integer> tmp = new ArrayList<Integer>(); 
                   tmp.add(nums[p]);
                   tmp.add(nums[k]);
                   tmp.add(nums[q]);
                   res.add(tmp);
                   ++k;
                   --q;
                   while(k < q && nums[k] == nums[k - 1]&& nums[q] == nums[q + 1])
                        ++k;
               }
           }
           }
       }
         
         return res;
    }
}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值