2022年12月2日 星期五

[1806] Minimum Number of Operations to Reinitialize a Permutation

嗯~~~好吧~既然題目Hint都說了,可以用暴力解 XD
那就先這樣吧(逃走)
int reinitializePermutation(int n){
int *perm=calloc(n, sizeof(int));
int *arr=calloc(n, sizeof(int));
for (int i=0;i<n;i++)
perm[i]=i;

int count=0;
bool flag=true;
while (flag)
{
count++;
flag=false;
for (int i=0;i<n;i++)
{
int index=-1;
if (i%2==0)
index=i/2;
else if (i%2==1)
index=n/2+(i-1)/2;
arr[i]=perm[index];
if (arr[i]!=i)
flag=true;
}
memcpy(perm, arr, sizeof(int)*n);
}
return count;
}

PS: 雖然回圈裡的index 可以拿掉不用,但感覺在[] 裡面做運算速度好像會變慢捏?!
int reinitializePermutation(int n){
int *perm=calloc(n, sizeof(int));
int *arr=calloc(n, sizeof(int));
for (int i=0;i<n;i++)
perm[i]=i;

int count=0;
bool flag=true;
while (flag)
{
count++;
flag=false;
for (int i=0;i<n;i++)
{
if (i%2==0)
arr[i]=perm[i/2];
else if (i%2==1)
arr[i]=perm[n/2+(i-1)/2];
if (arr[i]!=i)
flag=true;
}
memcpy(perm, arr, sizeof(int)*n);
}
return count;
}

沒有留言:

張貼留言