LC 189 旋转数组
题目描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
要求时间O(n),空间O(1)
题解
void rotate(vector<int>& nums, int k) {
k = k % nums.size();
int count = 0;
for (int start = 0; count < nums.size(); start++) {
int current = start;
int pre = nums[start];
do {
int next = (current + k) % nums.size();
int temp = nums[next];
nums[next] = pre;
pre = temp;
current = next;
count++;
} while (start != current);
}
}
直接把每一个数字放到它最后的位置,但这样的后果是遗失原来的元素。
因此,我们需要把被替换的数字保存在变量 temp 里面,循环将下一个元素存到最终位置,调整一次count计数++,count满足==size退出。