https://leetcode.com/problems/rotate-array/discuss/
right
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int> t = nums;
for (int i = 0; i < nums.size(); ++i) {
nums[(i + k) % nums.size()] = t[i];
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if (nums.empty() || (k %= nums.size()) == 0) return;
int n = nums.size();
for (int i = 0; i < n - k; ++i) {
nums.push_back(nums[0]);
nums.erase(nums.begin());
}
}
};
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if (nums.empty() || (k %= nums.size()) == 0) return;
int n = nums.size();
reverse(nums.begin(),nums.begin()+n-k);
//reverse range[nums.begin(),nums.begin()+n-k)
reverse(nums.begin()+n-k,nums.end());
reverse(nums.begin(),nums.end());
}
};
left
vector<int> array_left_rotation(vector<int> a, int n, int k) {
vector<int> ret (a);
for(int i = 0; i < n; i++){
int newLocation = (i - k + n) % n;
ret[newLocation] = a[i];
}
return ret;
}
To find , just keep adding to until the number is between 0 and .
As an example, . Add 13 to -27, you get -14, again you get -1, and again you get 12.
So, .
A bit more generally, you might want to realize that for any . That should help with your first question.