标签:保存 更新 第一个 ima pre 为什么 空间 mic 要求
我没懂为什么两个指标都这么差,看代码的时间复杂度是O(n),空间复杂度是O(1)。
给定一个数组,将数组中的元素向右移动?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) 的?原地?算法。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(nums.size() == 0 || k == 0 || k%nums.size() == 0) return;
for(int i = 1, index = 0, flag = 0, save1, save2 = nums[0]; i <= nums.size(); i++){
save1 = nums[(index + k) % nums.size()];
nums[(index + k) % nums.size()] = save2;
index = (index + k) % nums.size();
if(index == flag){
save1 = nums[++index];
flag = index;
}
save2 = save1;
}
}
};
标签:保存 更新 第一个 ima pre 为什么 空间 mic 要求
原文地址:https://www.cnblogs.com/wasi-991017/p/12676114.html