2018年1月31日 星期三

[189] Rotate Array

廢到不知道該說自己什麼, 呵呵.
給一個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];
     
    }
}

沒有留言:

張貼留言