您的位置:首页 > 汽车 > 新车 > LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 三段逆置 C写法

2024/10/19 8:34:56 来源:https://blog.csdn.net/m0_63816268/article/details/140245296  浏览:    关键词:LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 C写法 三段逆置

image-20240707131143615

思路:

三段逆置方法:先逆置前n-k个 再逆置后k个 最后整体逆置

由示例1得,需要先逆置1,2,3,4 再逆置5,6,7,最后前n-k个与后k个逆置

image-20240707132017166

代码

void reverse(int*num, int left, int right) //逆置函数
{  while(left < right) //left和right同时移动,相遇则逆置完成{int tmp = num[left];num[left] = num[right];num[right] = tmp;left++;right--;}
}void rotate(int* nums, int numsSize, int k) {if(k > numsSize) //当k大于numsSize时就说明轮转完了一轮,则数组不变k %= numsSize; //余数为新一轮的轮转数reverse(nums, 0, numsSize - k - 1); //从0开始,则n-k的位置实际为n-k-1reverse(nums, numsSize - k, numsSize - 1); //从n-k开始,实际为后k个的位置reverse(nums, 0, numsSize - 1); //整体逆置
}

时间复杂度O(N) 空间复杂度O(1):
image-20240707133133689

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com