2025年9月30日 星期二

[658] Find K Closest Elements

奇怪!!!寫起來很醜!!!
別人用C++怎麼只要三四行呢都西跌~?!
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findClosestElements(int* arr, int arrSize, int k, int x, int* returnSize) {
*returnSize = k;
if ( arrSize <= 1)
return arr;
int l=0, r;
int min = INT_MAX;
int diff=0;
int count = 0;
int left, right;
while (count < k)
{
diff += abs(arr[l+count]-x);
count++;
}
if (diff < min)
min = diff;
r= l+count;
left = 0;
right = r-l-1;
while (r<arrSize)
{
diff = diff + abs(arr[r]-x) - abs(arr[l++]-x);
if (diff < min)
{
min = diff;
left = l;
right = r;
}
r++;
}
return arr+left;
}

結果別人只要這樣就寫好了. 我吃屎好了.....

/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* findClosestElements(int* arr, int arrSize, int k, int x, int* returnSize) {
*returnSize = k;
int l = 0;
int r = arrSize -1;
while (r-l+1 > k)
{
if (x- arr[l] <= arr[r]-x)
r--;
else
l++;
}
return arr+l;
}

沒有留言:

張貼留言