Leetcode189
加一
题目:
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
1 | 输入: nums = [1,2,3,4,5,6,7], k = 3 |
示例 2:
1 | 输入:nums = [-1,-100,3,99], k = 2 |
提示:
1 <= nums.length <= 105-231 <= nums[i] <= 231 - 10 <= k <= 105
进阶:
- 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
- 你可以使用空间复杂度为
O(1)的 原地 算法解决这个问题吗?
代码实现
1 | void rotate(int* nums, int numsSize, int k) { |
基本思路
- 对
k取余,处理k大于数组大小的情况,避免不必要的循环。 - 使用变量
begin记录当前循环的开始下标,len记录在循环中的当前下标。 - 循环执行,每次计算下一个位置
before,将上一个值移动到当前值。 - 如果循环结束,将开始的值赋给结尾的值,进入下一个循环。
这样,通过不断地将值从上一个位置移动到当前位置,实现数组的循环右移。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 全之の博客!
