初级算法 - 旋转数组

初级算法 - 旋转数组

给定一个数组,将数组中的元素向右移动 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]

注意题目,k是非负数。

同时,我们要考虑k大于数组长度的情况,对其进行取模,得到的余数就是真正移动后的位置。

只需要这样,将被移动长度的数组截取下来直接插入在数组最前面…

/**
 Do not return anything, modify nums in-place instead.
 */
function rotate(nums: number[], k: number): void {
    nums.splice(0, 0, ...(nums.splice(-(k % nums.length))));
};

同时,还翻转类型的办法。

# 算法 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×