zoukankan      html  css  js  c++  java
  • 三数之和

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

    注意:答案中不可以包含重复的三元组。

    class Solution {
        public List<List<Integer>> threeSum(int[] nums) {
            List<List<Integer>> list=new ArrayList<>();
            Arrays.sort(nums);
            for(int i=0;i<nums.length;i++)
            {
                if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
                int c=nums[i];   //a+b=-c,这是那个c
                int m=i+1;      //双指针左边的下标,开始指向要判断的下一位
                int n=nums.length-1;//双指针右边的下标,开始指向最后一位
                while(m<n)
                {
                    if(nums[m]+nums[n]==-c)
                    {
                       list.add(Arrays.asList(nums[i],nums[m],nums[n]));
                        while(m<n&&nums[m]==nums[m+1])  //去重,如果下一个是相同,代表已经有两个元素相同了,所以如果为0,那么第三个元素一定是为0的,那么就肯定重复了,比如说[-2,0,0,2,2]就会出现两个[-2,0,2]这种情况,所以如果有相等的元素,肯定就不会再要了
                            m++;
                        while(m<n&&nums[n]==nums[n-1])   //去重
                            n--;
                        m++;
                        n--;
                    }
                    else if(nums[m]+nums[n]<-c)
                    {
                      m++;
                    }
                    else
                    {
                        n--;
                    }
                        
                }
            }
            return list;
        }
    }

  • 相关阅读:
    JS检测浏览器Adobe Reader插件
    Java Filter防止sql注入攻击
    log4j的基本配置参数
    Log4j.properties配置详解
    使用Spring进行统一日志管理 + 统一异常管理
    springMVC获取request和response
    深入浅出Mybatis-分页
    PROPAGATION_REQUIRED事务管理
    Java String类型数据的字节长度
    构建高并发高可用的电商平台架构实践
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11266621.html
Copyright © 2011-2022 走看看