Rotate Array@LeetCode

vicvinc發表於2019-05-13

整理的一個演算法,主要覺得前面的reverse函式比較厲害,非原創:
演算法的思想就是翻轉兩部分,然後整體翻轉,這兩步可以顛倒:

class Solution {
public:

    void reverse(int* a, int* b)
    {
        while (--b > a) {
            *b ^= *a;
            *a ^= *b;
            *b ^= *a;
            ++a;
        }
    }

    void rotate(int arr[], int n, int k)
    {
        int p = k%n;
        reverse(arr, arr+n);
        reverse(arr, arr+p);
        reverse(arr+p, arr+n);
    }
};

相關文章