Leetcode算法题(C语言)4--旋转数组

题目:旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]

示例 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的原地算法。

代码实现:

void rotate(int* nums, int numsSize, int k) {   
    int i, j;
    int flag_value;
    int temp;
    
    /* 排除异常情况 */
     if(k > numsSize)
     {
         k = k % numsSize;
     }
    else if(k == 0)
    {
        return;
    }
    
    /* 循环移位 */
    for(j = 0; j < k; j++)
    {
        temp = nums[0];
        for(i = numsSize - 1; i >= 0; i--)
        {
            if(i == numsSize - 1)
                nums[0] = nums[i];
            else
                nums[i + 1] = nums[i];
        }
        nums[1] = temp;
    }
}


解题逻辑:
k每旋转一次,数组每位元素即向后移动一位。

你可能感兴趣的:(Leetcode算法题)