用于检查数组是否已排序和旋转的Java程序
给定一个包含 N 个不同整数的数组。任务是编写一个程序来检查这个数组是否被排序和逆时针旋转。排序后的数组不被认为是排序和旋转的,即应该至少有一个旋转。
例子:
Input : arr[] = { 3, 4, 5, 1, 2 }
Output : YES
The above array is sorted and rotated.
Sorted array: {1, 2, 3, 4, 5}.
Rotating this sorted array clockwise
by 3 positions, we get: { 3, 4, 5, 1, 2}
Input: arr[] = {7, 9, 11, 12, 5}
Output: YES
Input: arr[] = {1, 2, 3}
Output: NO
Input: arr[] = {3, 4, 6, 1, 2, 5}
Output: NO
方法:
- 找到数组中的最小元素。
- 现在,如果对数组进行排序,然后旋转最小元素之前的所有元素将按升序排列,并且最小元素之后的所有元素也将按升序排列。
- 检查最小元素之前的所有元素是否按递增顺序排列。
- 检查最小元素之后的所有元素是否按升序排列。
- 检查数组的最后一个元素是否小于起始元素。
- 如果以上三个条件都满足,则打印YES否则打印NO 。
下面是上述思想的实现:
Java
// Java program to check if an
// array is sorted and rotated
// clockwise
import java.io.*;
class GFG {
// Function to check if an array is
// sorted and rotated clockwise
static void checkIfSortRotated(int arr[], int n)
{
int minEle = Integer.MAX_VALUE;
int maxEle = Integer.MIN_VALUE;
int minIndex = -1;
// Find the minimum element
// and it's index
for (int i = 0; i < n; i++) {
if (arr[i] < minEle) {
minEle = arr[i];
minIndex = i;
}
}
boolean flag1 = true;
// Check if all elements before
// minIndex are in increasing order
for (int i = 1; i < minIndex; i++) {
if (arr[i] < arr[i - 1]) {
flag1 = false;
break;
}
}
boolean flag2 = true;
// Check if all elements after
// minIndex are in increasing order
for (int i = minIndex + 1; i < n; i++) {
if (arr[i] < arr[i - 1]) {
flag2 = false;
break;
}
}
// check if the minIndex is 0, i.e the first element
// is the smallest , which is the case when array is
// sorted but not rotated.
if (minIndex == 0) {
System.out.print("NO");
return;
}
// Check if last element of the array
// is smaller than the element just
// before the element at minIndex
// starting element of the array
// for arrays like [3,4,6,1,2,5] - not sorted
// circular array
if (flag1 && flag2 && (arr[n - 1] < arr[0]))
System.out.println("YES");
else
System.out.print("NO");
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 3, 4, 5, 1, 2 };
int n = arr.length;
// Function Call
checkIfSortRotated(arr, n);
}
}
// This code is contributed
// by inder_verma.
输出
YES
有关更多详细信息,请参阅有关检查数组是否已排序和旋转的完整文章!