From :
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is
rotated to [5,6,7,1,2,3,4]
.
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(k==0) return;
k= k % nums.size();
while(k--) {
nums.insert(nums.begin(), nums.back());
nums.pop_back();
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int start, int end) {
while(start < end) {
nums[start] ^= nums[end];
nums[end] ^= nums[start];
nums[start] ^= nums[end];
++start;
--end;
}
}
void rotate(vector<int>& nums, int k) {
k = k%nums.size();
rotate(nums, 0, nums.size()-1);
rotate(nums, 0, k-1);
rotate(nums, k, nums.size()-1);
}
};
public class Solution {
public void rotate(int[] nums, int k) {
int n;
if (nums == null || (n = nums.length) == 0) {
return;
}
k = k % nums.length;
rotate(nums, 0, n - 1);
rotate(nums, 0, k - 1);
rotate(nums, k, n - 1);
}
private void rotate(int[] nums, int start, int end) {
while (start < end) {
nums[start] ^= nums[end];
nums[end] ^= nums[start];
nums[start] ^= nums[end];
++start;
--end;
}
}
}