https://leetcode.com/problems/rotate-array/discuss/

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.

results matching ""

    No results matching ""