**
力扣C语言:旋转数组
**
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2skh7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
void rotate(int* nums, int numsSize, int k){
while(k>0){
int last = nums[numsSize-1];
for(int i=numsSize-1; i>0; i--){
nums[i]=nums[i-1];
}
nums[0] = last;
k--;
}
}
使用c我的思路,结果如上。。。也许因为while里边套了个for循环就耗时太久。时间超过了。
使用c++代码如下:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len=nums.size();//数组长度len
k%=len;//
if(k==0||len==1) return ;//k=0未移动,len=1数组只有一个数
int temp = nums[0];
int count = 0;
for(int i=k,cnt=0;cnt<len;i+=k,cnt++){
int t=nums[i%len];
nums[i%len]=temp;
temp=t;
if(i%len==count)
{
count++;
i = count;
temp = nums[i%len];
}
}
}
};