检查数组是否在C ++中排序和旋转

给定一个整数数组,任务是检查该数组是否已排序(递增顺序)并在经过一定数量的位置后旋转。

例如

输入1:

N = [7, 8, 9, 4, 5, 6]

输出:

True

说明: 由于给定的数组按递增顺序排列,并且旋转了第3个位置之后的元素,因此在这种情况下,我们将返回True。

输入2:

N = [1, 5, 7, 6, 2, 3]

输出:

False

说明: 由于给定的数组既没有递增顺序,也没有旋转到某个特定位置,因此输出为False。

解决这个问题的方法

我们有一个数组,该数组的元素以递增顺序排列或未排序。如果必须对数组进行排序和旋转,则至少存在一个元素,使得N [i]> N [i + 1]。

因此,对于每个N [i],我们将计算是否存在满足条件的元素,并相应地返回True或False。

  • 输入数组元素的输入。

  • 布尔函数checkSortedandRotated(int * arr,int n)将数组及其大小作为输入,如果对数组进行排序和旋转则返回true,否则返回false。

  • 遍历整个数组并计算元素的数量(arr [i]> arr [i + 1]%n)。如果计数为“ 1”,则返回True,否则返回False。

  • 返回输出。

示例

#include <bits/stdc++.h>
using namespace std;
bool checkSortedandRotated(int * arr, int n) {
   int count = 0;
   for (int i = 0; i < n; i++) {
      if (arr[i] > arr[(i + 1) % n])
         count++;
   }
   return (count <= 1);
}
int main() {
   int arr[] = {5,6,7,1,2,3,4};
   int n = sizeof(arr) / sizeof(int);
   if (checkSortedandRotated(arr, n)) {
      cout << "True" << endl;
   } else {
      cout << "False" << endl;
   }
   return 0;
}

运行上面的代码将生成如下输出:

输出结果

True

由于给定的数组[5、6、7、1、2、3、4]已从第3个位置进行排序和旋转,因此在这种情况下,我们得到的输出为“ True”。