今日頭條筆試題:找出數組中差值爲k去重後的數對

思路:已知一個含有重複數字的無序數組,還有一個整數k,找出有多少對不重複的數對(i, j)使得i和j的差恰好爲k。因爲k有可能爲0,而只有含有至少兩個相同的數字才能造成數對,那麼就是說須要統計數組中每一個數字的個數。能夠創建每一個數字和其出現次數之間的映射,而後遍歷哈希表中的數字,若是k爲0且該數字出現的次數大於1,則結果count自增1;若是k不爲0,且用當前數字加上k後獲得的新數字也在數組中存在,則結果count自增1,參見代碼以下:數組

class Solution { public: int findPairs(vector<int>& nums, int k) { int count = 0, length = nums.size(); unordered_map<int, int> numbers; for(auto num : nums){ numbers[num]++; } for(auto num : numbers){ if(k == 0 && num.second > 1) count++; if(k > 0 && numbers.count(num.first+k)) count++; } return count; } };
相關文章
相關標籤/搜索