給一個array, 往右shift 移k個
存回原本的array裡
Rotate Array
無腦慢慢移 囧
void rotate(int* nums, int numsSize, int k) {
if (nums == NULL || numsSize <1 || k%numsSize==0)
return;
if (k>=numsSize)
k=k%numsSize;
int i = 0,j=0;
for (i=0; i<k; i++)
{
int tmp=nums[numsSize-1];
for (j=0; j <= numsSize-2; j++)
{
nums[numsSize-1-j]=nums[numsSize-1-j-1];
}
if(k==1& numsSize==2)
nums[1]=nums[0];
nums[0] = tmp;
}
}
切兩段法
void rotate(int* nums, int numsSize, int k) {
if (nums == NULL || numsSize <1 || k%numsSize==0)
return;
if (k>=numsSize)
k=k%numsSize;
int *p = malloc(sizeof(int)*numsSize);
memcpy(p,nums+(numsSize-k),sizeof(int)*k);
memcpy(p+k,nums,sizeof(int)*(numsSize-k));
memcpy(nums,p,sizeof(int)*numsSize);
}
取餘數法
void rotate(int* nums, int numsSize, int k) {
if (nums == NULL || numsSize <1 || k%numsSize==0)
return;
if (k>=numsSize)
k=k%numsSize;
int *tmp = malloc (sizeof(int)*numsSize);
memcpy(tmp,nums,sizeof(int)*numsSize);
for (int i=0;i<numsSize;i++)
{
nums[i] = tmp[(numsSize+(i-k))%numsSize];
}
}
沒有留言:
張貼留言