使用C++编写的数组右旋转的反转算法

使用c++编写的数组右旋转的反转算法

在本文中,我们将了解逆转算法,将给定的数组向右旋转k个元素,例如 −

Input : arr[ ] = { 4, 6, 2, 6, 43, 7, 3, 7 }, k = 4Output : { 43, 7, 3, 7, 4, 6, 2, 6 }Explanation : Rotating each element of array by 4-element to the right gives { 43, 7, 3, 7, 4, 6, 2, 6 }.Input : arr[ ] = { 8, 5, 8, 2, 1, 4, 9, 3 }, k = 3Output : { 4, 9, 3, 8, 5, 8, 2, 1 }

寻找解决方案的方法

通过将每个元素向右移动并重复此过程 k 次,您可以轻松解决此问题。但这会花费更多时间,因为其时间复杂度为O(k * N)。

反转算法:反转是反转数组,旋转数组可以通过反转某些元素范围来完成。根据这个算法 –

首先,反转整个数组。用 k 与 N(数组大小)的模来修改 k,因为 k 是大于 N。反转数组的前 k 个元素以使其按顺序排列。然后反转剩余元素的范围,即从 k 到 N-1。 li>

示例

using namespace std;#include void reverse(int nums[], int start,int end) {   int temp=0;   // reversing array with swapping start element with end element.   while(start<=end){      temp=nums[end];      nums[end]=nums[start];      nums[start]=temp;      start++;      end--;   }}int main() {   int arr[] = {4, 6, 2, 6, 43, 7, 3, 6, 2, 4, 5 };   int N = sizeof(arr)/sizeof(arr[0]);   int k = 4;   // reversing whole array   reverse(arr, 0, N-1);   k = k%N;   // reversing element range of 0 to k-1.   reverse(arr, 0, k-1);   // reversing element range of k to last element.   reverse(arr, k, N-1);   cout << "Array after rotating by k-elements : ";   for(int i = 0;i<N;i++)      cout << arr[i] << " ";   return 0;}

输出

Array after rotating by k-elements : 6 2 4 5 4 6 2 6 43 7 3

结论

在本文中,我们讨论了使用反转算法按 k 元素对数组进行右旋转的问题。我们讨论了反转算法是什么以及如何实现它来解决此问题。我们还讨论了解决这个问题的 C++ 代码。我们可以用任何其他语言(例如 C、Java、Python 等)编写此代码。希望本文对您有所帮助。

立即学习“C++免费学习笔记(深入)”;

以上就是使用C++编写的数组右旋转的反转算法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:47:53
下一篇 2025年12月17日 21:48:06

相关推荐

发表回复

登录后才能评论
关注微信