【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;
}

 

posted @ 2020-09-24 14:29  温暖了寂寞  阅读(141)  评论(0编辑  收藏  举报