1. 程式人生 > >【easy】532. K-diff Pairs in an Array

【easy】532. K-diff Pairs in an Array

數組 重復 學會 pub uno for gpo 無序 當前

這道題給了我們一個含有重復數字的無序數組,還有一個整數k,讓我們找出有多少對不重復的數對(i, j)使得i和j的差剛好為k。由於k有可能為0,而只有含有至少兩個相同的數字才能形成數對,那麽就是說我們需要統計數組中每個數字的個數。我們可以建立每個數字和其出現次數之間的映射,然後遍歷哈希表中的數字,如果k為0且該數字出現的次數大於1,則結果res自增1;如果k不為0,且用當前數字加上k後得到的新數字也在數組中存在,則結果res自增1,參見代碼如下:

/*
思路:因為存在k=0的情況,並且答案需要是完全不重復的數對,所以
    可以先存下每個數字出現的次數,如果k=0且每個數字出現次數大於1,則count++
    如果k>0,且當前數字+k之後的數字也出現過,那麽count++
*/ class Solution { public: int findPairs(vector<int>& nums, int k) { int count = 0; int len = nums.size(); unordered_map<int,int> map; for (auto num:nums) map[num]++; for (auto a:map){ if (k==0 && a.second>1) count++;
if (k>0 && map.count(a.first + k)) count++; } return count; } };

***一定要學會unordered_map,auto等,這個很好寫哦

【easy】532. K-diff Pairs in an Array