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