旋转数组-O(1)空间复杂度,O(n)时间复杂度)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jirryzhang/article/details/81435672
#include <iostream>
using namespace std;

void myReverse(int nums[], int start, int end) {
	while (start < end) {
		int tmp = nums[start];
		nums[start++] = nums[end];
		nums[end--] = tmp;
	}
}

int* rotate(int nums[],int n, int k) {
	myReverse(nums, 0, n - 1 - k);//前n-k个元素反转
	myReverse(nums, n - k, n - 1);//后k个元素反转
	myReverse(nums, 0, n - 1);//整体反转后,后k个元素正序到了前k个位置,完成旋转
	return nums;
}

void test()
{
	int a[]={1,2,3,4,5,6,7,8,9};
	size_t len=sizeof(a)/sizeof(int);
	rotate(a,len,4);
	for (size_t i=0;i<len;++i){
		cout<<a[i]<<" ";
	}
}

猜你喜欢

转载自blog.csdn.net/jirryzhang/article/details/81435672