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

  • 相关阅读:
    vb.net 与 c# 运算符区别
    获取任务栏坐标
    获取系统任务栏高度
    【HDOJ5555】Immortality of Frog(状压DP)
    【HDOJ5559】Frog and String(构造)
    【HDOJ5558】Alice's Classified Message(后缀数组)
    【Hihocoder1634】Puzzle Game(DP)
    【HDOJ5981】Guess the number(DP)
    【HDOJ5975】Aninteresting game(BIT原理)
    【HDOJ5973】Game of Taking Stones(Java,威佐夫博弈)
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11266621.html
Copyright © 2011-2022 走看看