您的位置:首页 > 其它

LeetCode Rotate Array 翻转数组

2015-04-10 21:58 351 查看
题意:给定一个数组,将该数组的后k位移动到前n-k位之前。(本题在编程珠玑中第二章有讲)

思路:

方法一:将后K位用vector容器装起来,再移动前n-k位到后面,再将容器内k位插到前面。

class Solution {
public:
void rev(int *q,int *p)
{
while( q!=p && q!=p+1 )
{
*q ^= *p;
*p ^= *q;
*q ^= *p;
q++;
p--;
}
}

void rotate(int nums[], int n, int k) {
if( !k || !n || n==1 || k==n ) return;
k %= n;
int temp, i, j;
for(i=1; i<=k; i++)
{
temp = nums[n-i];
cout<<temp<<endl;
for(j=n-i-k; j>=0; j-=k)
{
nums[j+k] = nums[j];
cout<<nums[j+k]<<endl;
}
nums[j+k] = temp;
}
temp=n%k;
//套用第2种方法
rev(&nums[0],&nums[temp-1]);
rev(&nums[temp],&nums[k-1]);
rev(&nums[0],&nums[k-1]);
}
};


Rotate Array
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: