leetcode每日一题算法,轮转数组

102 阅读1分钟

leetcode每日一题算法,轮转数组


题目

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

输入: nums = [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:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105

解题思路


1、当k小于numSize时,将后面的k个数据按顺序移动到最前面 2、当k= numSize时,移动完和原数组一样 3、当k大于numSize时,相当于移动numSize%k次

代码
void rotate(int* nums, int numsSize, int k) {
    if(k >= numsSize) {
        k = k % numsSize;
    }
    int result[numsSize];
    for(int i = 0; i < numsSize; i++) {
        if ((numsSize - k + i) < numsSize) {
            result[i] = nums[numsSize - k + i];
        } else {
            result[i] = nums[i - k];
        }
    }
    for(int i = 0; i < numsSize; i++) {
        nums[i] = result[i];
    }
}