
189Rotate_Array
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
暴力:往右移动k次
1 2 3 4 5 6 7 8 9
|
int n = nums.size(); k = k % n; while (k--) { int tmp = nums[n - 1]; for (int i = n - 1; i > 0; ++i) { nums[i] = nums[i - 1]; } nums[0] = tmp; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
reverse(nums.begin(), nums.end());
auto it1 = nums.begin(); auto it2 = nums.begin(); while (k--) { it1++; it2++; } reverse(nums.begin(), it1);
reverse(it2, nums.end());
|
reverse的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
void (int *l, int *r) { --r; for (; l < r; ++l, --r) { int tmp = *l; *l = *r; *r = tmp; } }
void rotate(int* nums, int numsSize, int k) { k %= numsSize; reverse(nums, nums + numsSize); reverse(nums, nums + k); reverse(nums + k, nums + numsSize); }
|
近期评论