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;
        }
    }

  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11266621.html
Copyright © 2011-2022 走看看