骚操作

数组

// 反转数组
    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);//先反转前n-k个
        reverse(nums.begin() + n - k, nums.end());//再反转后面的
        reverse(nums.begin(), nums.end());//最后整体反转
  }

//更快地反转数组
    void rotate(vector<int>& nums, int k) {
        if (nums.empty() || (k %= nums.size()) == 0) return;
        int n = nums.size(), start = 0, i = 0, cur = nums[i], cnt = 0;//通过更多的辅助变量达到目的 逻辑较为复杂
        while (cnt++ < n) {
            i = (i + k) % n;
            int t = nums[i];
            nums[i] = cur;
            if (i == start) {
                ++start; ++i;
                cur = nums[i];
            } else {
                cur = t;
            }
        }
    }

 

posted @ 2018-11-01 20:25  渡万丈红尘  阅读(212)  评论(0编辑  收藏  举报