LeetCode 189. Rotate Array
- 2020 年 2 月 12 日
- 筆記
题意:将一个数组旋转k位,
用O(1)空间的算法去解决。找到nums[x]旋转之后对应的位置,交换二者,然后得到的数字再找下去。知道找到一开始的数字,形成一个闭环了,然后x++,直到交换次数==nums.size
class Solution { public: void rotate(vector<int>& nums, int k) { int len = nums.size(); k = k % len; int x; int y; int start=0; int pos=0; x=nums[pos]; int num=0; while(1) { y = nums[(pos+k)%len]; nums[(pos+k)%len] = x; x = y; pos = (pos+k)%len; num++; if(pos==start && num!=nums.size()) { pos = start+1; start = pos; x = nums[pos]; continue; } if(num==nums.size()) break; } } };