【easy】532. K-diff Pairs in an Array
阿新 • • 發佈:2018-02-12
數組 重復 學會 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