题目:返回将一维数组向右旋转k个位置的结果。比如,一维数组{1,2,3,4,5},当k=2时,返回结果是{4,5,1,2,3}。要求常数级空间复杂度,允许修改原有数组。
伪代码
int [] rotataK(int [] A,int k)
{
if (A == null || k >= A.length) return A;
reverse(A,0,A.length-1);//反转整个数组
reverse(A,0,k-1);//反转前k个数
reverse(A,k,A.length-1);//反转剩下的数
return A;
}
//辅助函数,反转从start到end的数
void reverse (int [] A,int start,int end)
{
while (start < end)
{
//交换A[start