检查数组是否在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”。
以上是 检查数组是否在C ++中排序和旋转 的全部内容, 来源链接: utcz.com/z/325066.html