1. 程式人生 > >532 -數組中的K-diff對

532 -數組中的K-diff對

repeat 範圍 hset 叠代器 color tor contain next nta

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

532 -數組中的K-diff對