DSA 中的循环轮换数组一次问题

2025年2月6日 | 阅读6分钟

引言

在这个问题中,我们有一个数组。我们的主要任务是将数组顺时针旋转一次。有很多方法可以解决这个问题。让我们逐一讨论这些方法。

示例-1

输入

arr[] = {1, 2, 3, 4, 5}

输出

arr[] = {5, 1, 2, 3, 4}

示例-2

输入

arr[] = {2, 3, 4, 5, 1}

输出

arr[]={1, 2, 3, 4, 5}

方法 1

在这种方法中,我们必须将数组的每个元素分配给其前一个元素,并将第一个元素分配给最后一个元素。

插图

让我们取一个数组,

arr[] = {1, 2, 3, 4, 5}

  • 首先,我们必须将最后一个元素初始化为变量'last_el',即5。
  • 然后,我们必须从n-1到1迭代数组,并分配arr1[i] = arr1[i-1]。
  • arr1[4] = arr1[3]
    • arr1[ ] = {1, 2, 3, 4, 4}
  • arr1[3] = arr1[2]
    • arr1[ ] = {1, 2, 3, 3, 4}
  • arr1[2] = arr1[1]
    • arr[ ] = {1, 2, 2, 3, 4}
  • arr1[1] = arr1[0]
    • arr1[ ] = {1, 1, 2, 3, 4}
  • 然后我们必须将last_el分配给arr[0]。
  • arr1[0] = 5
    • arr1[ ] = {5, 1, 2, 3, 4}
  • 上述方法的输出是{5, 1, 2, 3, 4}。

按照以下步骤解决问题

  • 首先,我们必须将最后一个元素存储在任何临时变量中。
  • 然后,我们必须将每个元素向前移动一个位置。
  • 然后,我们必须将最后一个元素分配给第一个元素。

让我们借助编程语言来实现上述编程。

C++ 中的实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了一个方法,该方法的目的是将数组旋转一次。此代码是借助C++编程语言编写的。

Java 实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了一个方法,该方法的目的是将数组旋转一次。此代码是借助Java编程语言编写的。

时间复杂度

上述方法的时间复杂度为O(n)。

空间复杂度

上述方法的空间复杂度为O(1)。

方法二

在这种方法中,我们必须使用指针方法来旋转数组。正如我们上面在循环旋转中讨论的,我们必须将最后一个元素移动到第一个位置,并将其余元素向前移动,我们可以通过将每个元素与最后一个元素交换,直到我们到达最后一个点来做到这一点。

按照以下步骤解决问题

  • 首先,我们必须取两个指针,i和j,它们分别指向数组的第一个和最后一个元素。
  • 然后我们必须开始交换arr[i]和arr[j],并保持j固定,i向j移动。
  • 然后我们必须重复上述步骤,直到i不等于j。

让我们借助编程语言来实现上述编程。

C++ 中的实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了一个swap(),它交换数组的元素,直到i不等于j。此代码是借助C++编程语言编写的。

Java 实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了一个swap(),它交换数组的元素,直到i不等于j。此代码是借助Java编程语言编写的。

时间复杂度

上述方法的时间复杂度为O(n)。

空间复杂度

上述方法的空间复杂度为O(1)。

方法-3

在这种方法中,我们必须使用反转算法。在这个算法中,我们首先必须反转n-1个元素,然后反转整个数组,这将导致一次右旋转。

按照以下步骤解决问题

  • 首先,我们必须将数组反转两次。
  • 然后,我们必须第一次反转前n-1(n=数组大小)个元素。
  • 然后,我们必须通过反转整个数组来旋转数组。

让我们借助编程语言来实现上述编程。

C++ 中的实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了反转算法。我们使用C++语言实现了此算法。

Java 实现

代码

输出

Cyclically rotate an array by one problem in DSA

说明

在上面的代码中,我们实现了反转算法。我们使用Java语言实现了此算法。

时间复杂度

上述方法的时间复杂度为O(n)。

空间复杂度

上述方法的空间复杂度为O(1)。