分享链接(看之前可以自己做做)
LeetCode–189旋转数组
个人题解: 题目: 下面简单介绍三种思路:(尽量考虑复杂度)
分析: 以解法 2 和 3 为例:
使用额外数组:
void rotate(int* nums, int numsSize, int k) {
int Newarr[numsSize];
for (int i = 0; i < numsSize; ++i) {
Newarr[(i + k) % numsSize] = nums[i];
}
for (int i = 0; i < numsSize; ++i) {
nums[i] = Newarr[i];
}
}
数组翻转:
void reverse(int *nums,int begin,int end)
{
while(begin<end)
{
int temp=nums[begin];
nums[begin]=nums[end];
nums[end]=temp;
begin+=1;
end-=1;
}
}
void rotate(int* nums, int numsSize, int k){
k%=numsSize;
reverse(nums,0,numsSize-k-1);
reverse(nums,numsSize-k,numsSize-1);
reverse(nums,0,numsSize-1);
}
|