2024年1月28日 星期日

[2367] Number of Arithmetic Triplets

本來想說暴力下去解一定會超時,結果竟然沒有XD
但比較奇怪的是,C的solution 裡面大家都沒有用break!奇怪XD

但反正這是我的第一版 QQ 裡面的continue 看起來是可以拿掉就是了。(拿掉的版本就先不貼啦。)

int arithmeticTriplets(int* nums, int numsSize, int diff) {
int i=0;
int j=1;
int k=2;
int count =0;
for (i=0; i<numsSize-2;i++)
{
for (j=1;j< numsSize-1;j++)
{
if (nums[j]-nums[i]>diff)
break;
else if (nums[j]-nums[i] < diff)
continue;
else
{
for (int k=2;k<numsSize;k++)
{
if (nums[k]-nums[j]> diff)
break;
else if (nums[k]-nums[j] < diff)
continue;
else
{
count++;
break;
}

}
}
}
}
return count;
}

看了討論區,發現可以用hash table 寫!!!
那就變成.....
int arithmeticTriplets(int* nums, int numsSize, int diff) {
int i=0;
int count =0;
bool *hash = calloc (201, sizeof(bool));
for (int idx=0; idx<numsSize;idx++)
hash[nums[idx]] = true;
for (int i=0; i<199;i++)
{
if (hash[i] && i+diff+diff <=200)
{
if (hash[i+diff] && hash[i+diff+diff])
count++;
}
}

return count;
}

果然是easy題目,另人開心XD!!!

沒有留言:

張貼留言