532 -數組中的K-diff對
阿新 • • 發佈:2019-04-16
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) return0; 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對