【leetcode】数组中的K-diff数对

int cmp(const void* a,const void* b){
    return *(int*)a - *(int*)b;
}

int findPairs(int* nums, int numsSize, int k){
    if(numsSize<2)return 0;
    qsort(nums,numsSize,sizeof(int),cmp);
    int i=0,j=i,n=0,res=0,count=0,pst=0;
    for(; i<numsSize-1; j=i,pst=0)
    {
        while(++j<numsSize && nums[i]+k > nums[j])
        {
            if (!pst && nums[j] != nums[i]) pst=j; //循环同时找下和i不同的第一个数的位置
        }
        if(j<numsSize && nums[j]==nums[i]+k) count++;
        if (pst) i=pst; // 如果pst有值 证明之前循环顺便找到 如果没值那下面循环继续找
        else
        {
             j=i;
            while(i<numsSize && nums[j]==nums[i])i++; 
        }
    }
    return count;
}
原文地址:https://www.cnblogs.com/ganxiang/p/13723903.html