K-diff Pairs in an Array(C++数组中的K-diff数对)

解题思路:

(1)先使用优先队列排序

(2)再通过相邻比较,其中依据递增性,记录每次nums[j]-nums[i]>k的位置,这作为下次j的初始位置

(3)i的位置是代表不同的数

class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
    	if (k<0||nums.size()<=1) return 0;
        auto comp = [&](const int &a, const int &b) {
            return a>b; 
        };
        priority_queue<int,vector<int>,decltype(comp)> pq(nums.begin(),nums.end(),comp);
        vector<int> v; //存储排好序的数组 
        while(!pq.empty()) {
        	v.push_back(pq.top());
        	pq.pop();
		}
		
		int i = 0,j = 0,last = 0,count = 0,prev = 0;
		while(i<v.size()) {
			prev = v[i];
			j = (last==i)?(i+1):last;
			while(j<v.size()) {
				if (v[j]-v[i]<k) {
					j++;
				} else {
					if (v[j]-v[i]>k) {
						last = j;
						break;
					} else {
						count++;
						while(j<v.size() && v[j]-v[i]==k) {
							j++;
						}
						last = j;
						break;
					}
				}
			}
			i++; 
			while(i<v.size() && prev==v[i]) {
				i++;
			}
		}
		return count;
    }
};
发布了264 篇原创文章 · 获赞 272 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/coolsunxu/article/details/105480890