最近看《编程珠玑》,里面提到了一个常见的向量旋转问题,是指将一个数按照某点前后置换,比如【1,2,3,4,5,6,7,8,9,10】按照4旋转后,就变成了【5,6,7,8,9,10,1,2,3,4】。
之前在leetcode上也看到了这个问题,当时觉得很简单,就是把前i个数存起来,然后将后面的数据向前移动,然后在把存起来的前i个数加在后面。
《编程珠玑》上提到了两种算法,非常高效,时间复杂度为O(n),空间复杂度为O(1)。
代码1:
int gcd(int a, int b) {
int c;
while ((c = a%b) != 0) {
a = b;
b = c;
}
return b;
}
void rotate1(int* nums,