[日常刷题]leetcode D43

版权声明:希望各位多提意见多多互相交流哦~ https://blog.csdn.net/wait_for_taht_day5/article/details/83281299

532. K-diff Pairs in an Array

Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.

Example 1:

Input: [3, 1, 4, 1, 5], k = 2
Output: 2
Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5).
Although we have two 1s in the input, we should only return the number of unique pairs.

Example 2:

Input:[1, 2, 3, 4, 5], k = 1
Output: 4
Explanation: There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).

Example 3:

Input: [1, 3, 1, 5, 4], k = 0
Output: 1
Explanation: There is one 0-diff pair in the array, (1, 1).

Note:

  1. The pairs (i, j) and (j, i) count as the same pair.
  2. The length of the array won’t exceed 10,000.
  3. All the integers in the given input belong to the range: [-1e7, 1e7].

Solution in C++:

关键点:

  • unique & k可以为0

思路:

  • 开始思路有点错误,直接用set去重了,然后以(*it) + k 的形式去寻找是否在set中,发现这样当k = 0的时候会返回set大小;然后就打算暴力了,先sort一下,然后直接nums[j] - nums[i] == k判断,这里存在的bug就是不能处理unique的情况,所以我用set存key的形式处理的,看到discuss里面也有人直接循环去重,因为这里是排序好的,所以相同的数字都挨在一起。
int findPairs(vector<int>& nums, int k) {
        if (nums.size() == 0)
            return 0;
        int result = 0;
        sort(nums.begin(), nums.end());
        set<int> sets;
        for(int i = 0; i < nums.size(); ++i){
            for(int j = i+1; j < nums.size(); ++j){
                if (nums[j] - nums[i] == k){
                    set<int>::iterator it = sets.find(nums[i]);
                    if ( it == sets.end()){
                        ++result;
                        sets.insert(nums[i]);
                    }
                    break;
                }
            }
        }
        
        return result;
    }

小结

今天有点弱,有点困了,明天还要加把劲干事情,另外一个没输完的题放到明天吧。今天算是把set的用法学了一遍。

猜你喜欢

转载自blog.csdn.net/wait_for_taht_day5/article/details/83281299
今日推荐