先貼個暴力解.......
int countKDifference(int* nums, int numsSize, int k){
int count =0;
for (int i=0;i<numsSize-1;i++)
{
for (int j=i+1;j<numsSize;j++)
{
if (abs(nums[i]-nums[j])==k)
count++;
}
}
return count;
}
更新版嗎?!不過因為測資數量不大的關係,好像不會看出它有快多少.
先用一個hash存每個數字出現的次數,然後你懂的。
(WTF XD)
int countKDifference(int* nums, int numsSize, int k){
int *hash= calloc(101, sizeof(int));
int count =0;
for (int i=0;i<numsSize;i++)
hash[nums[i]]++;
for (int i=0;i<numsSize;i++)
{
if ((nums[i]>k) && (hash[nums[i]-k]>0))
count+=hash[nums[i]-k];
else if ((nums[i]<k) && (hash[k-nums[i]]<0))
count+=hash[k-nums[i]];
}
return count;
}
沒有留言:
張貼留言