zoukankan      html  css  js  c++  java
  • 532 -数组中的K-diff对

    例1: 输入: [3,1,4,1,5],k = 2  输出: 2 

    说明:阵列中有两个2-diff对,(1,3)和(3,5)。 虽然我们在输入中有两个1,但我们应该只返回唯一对的数量。 

    例2: 输入: [1,2,3,4,5],k = 1  输出: 4 

    说明:阵列中有四个1-diff对,(1,2),(2,3),(3,4)和(4,5)。 

    例3: 输入: [1,3,1,5,4],k = 0  输出: 1  说明:数组中有一个0-diff对,(1,1)。

    注意: 对(i,j)和(j,i)计为同一对。 阵列的长度不会超过10,000。 给定输入中的所有整数都属于以下范围:[ - 1e7,1e7]。

    解题思路:
    使用HashSet将数组中有重复的元素放在一个HashSet中,若数组为空或者数组元素长度小于2或k<0,对数为0,若k==0时,则k-diff对数是此数组重复元素的HashSet集合的大小。若k>0是将数组元素放入两个HashSet中。通过迭代器遍历元素,判断set1中是否有元素值值跟迭代器当前遍历出的元素值-k相等,有则对数加一。
    public int findPairs(int[] nums, int k) {
                if (nums.length<2||nums==null||k<0)
                    return 0;
                Set<Integer> set1=new HashSet<>();
                Set<Integer> set2=new HashSet<>();
                Set<Integer> repeat=new HashSet<>();
                for (int i=0;i<nums.length;i++)
                {
                    if (set1.contains(nums[i]))
                    {
                        repeat.add(nums[i]);
                    }else {
                        set2.add(nums[i]);
                        set1.add(nums[i]);
                    }
                }
                if (k==0)
                    return repeat.size();
                int m=0;
                Iterator iterator=set1.iterator();
                while (iterator.hasNext())
                {
                    int a= (int) iterator.next();
                    if(set2.contains(a-k))
                        m++;
                }
                    return m;
                }
  • 相关阅读:
    批量修改图片尺寸
    批量修改文件名
    C++ 字符串的编码
    Hanoi问题
    农夫过河问题
    遍历文件夹中所有图片
    仿射变换和透射变换
    程序局部性原理
    14年年底的学习计划
    linux之Vim使用
  • 原文地址:https://www.cnblogs.com/dloading/p/10713522.html
Copyright © 2011-2022 走看看