📜  最短无序子数组的Java程序

📅  最后修改于: 2022-05-13 01:54:40.129000             🧑  作者: Mango

最短无序子数组的Java程序

给定一个长度为 n 的数组,问题是我们必须找到给定数组中最短的无序{既不增加也不减少}子数组的长度。
例子:

Input : n = 5
        7 9 10 8 11
Output : 3
Explanation : 9 10 8 unordered sub array.

Input : n = 5
       1 2 3 4 5
Output : 0 
Explanation :  Array is in increasing order.

这个想法是基于这样一个事实,即最短子数组的大小是 0 或 3。我们必须检查数组元素是增加还是减少,如果所有数组元素都在增加或减少,那么最短子数组的长度为 0,如果任一数组元素不跟随增加或减少,那么它的最短长度为 3。

Java
// JAVA program to find shortest subarray which is
// unsorted.
import java.util.*;
import java.io.*;
  
class GFG {
      
    // boolean function to check array elements 
    // are in increasing order or not
    public static boolean increasing(int a[],int n)
    {
        for (int i = 0; i < n - 1; i++) 
            if (a[i] >= a[i + 1])
                return false; 
                  
        return true;
    }
      
    // boolean function to check array elements 
    // are in decreasing order or not
    public static boolean decreasing(int arr[],int n)
    {
        for (int i = 0; i < n - 1; i++) 
            if (arr[i] < arr[i + 1])
                return false; 
                  
        return true;
    }
      
    public static int shortestUnsorted(int a[],int n)
    {
          
        // increasing and decreasing are two functions.
        // if function return true value then print
        // 0 otherwise 3.
        if (increasing(a, n) == true || 
                             decreasing(a, n) == true)
            return 0;
        else
            return 3;
    }
      
    // driver program
    public static void main (String[] args) {
          
        int ar[] = new int[]{7, 9, 10, 8, 11};
        int n = ar.length;
          
        System.out.println(shortestUnsorted(ar,n));
    }
}
  
// This code is contributed by Akash Singh.


输出 :
3

有关更多详细信息,请参阅有关最短无序子阵列的完整文章!