Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
题目:
给一数组,n个元素,将数组向右移动循环移动k个元素。
思路:
注意题目的要求是循环移动,所以k可以是任意非负整数,但数组元素个数为n,因此k=k%n。
一种通用的思路就是:
1、翻转整个数组 :A[0…n-1];如[7,6,5,4,3,2,1]
2、翻转数组前k个:A[0,k-1];如[5,6,7,4,3,2,1]
3、翻转数组后n-k个:A[k,n-1];如[5,6,7,1,2,3,4]
类似的应用:翻转句子中的全部单词,单词内容不变。
代码:
class Solution { public: void reverse(int nums[],int i,int j){ while(i<j){ int tmp=nums[i]; nums[i]=nums[j]; nums[j]=tmp; i++; j--; } } void rotate(int nums[], int n, int k) { k=k%n; if(k>=1 && n>1 && k<=n){ reverse(nums,0,n-1); reverse(nums,0,k-1); reverse(nums,k,n-1); } } };