📜  数组中领导者的Java程序

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

数组中领导者的Java程序

编写一个程序来打印数组中的所有 LEADERS。如果一个元素大于其右侧的所有元素,则该元素是领导者。最右边的元素始终是领导者。例如在数组 {16, 17, 4, 3, 5, 2} 中,领导者是 17、5 和 2。
让输入数组为 arr[] ,数组的大小为size

方法1(简单)
使用两个循环。外部循环从 0 运行到 size – 1,并从左到右一一选取所有元素。内部循环将选取的元素与其右侧的所有元素进行比较。如果选取的元素大于其右侧的所有元素,则选取的元素为前导。

Java
class LeadersInArray 
{
    /*Java Function to print leaders in an array */
    void printLeaders(int arr[], int size) 
    {
        for (int i = 0; i < size; i++) 
        {
            int j;
            for (j = i + 1; j < size; j++) 
            {
                if (arr[i] <=arr[j])
                    break;
            }
            if (j == size) // the loop didn't break
                System.out.print(arr[i] + " ");
        }
    }
  
    /* Driver program to test above functions */
    public static void main(String[] args) 
    {
        LeadersInArray lead = new LeadersInArray();
        int arr[] = new int[]{16, 17, 4, 3, 5, 2};
        int n = arr.length;
        lead.printLeaders(arr, n);
    }
}


Java
class LeadersInArray 
{
    /* Java Function to print leaders in an array */
    void printLeaders(int arr[], int size)
    {
        int max_from_right =  arr[size-1];
   
        /* Rightmost element is always leader */
        System.out.print(max_from_right + " ");
       
        for (int i = size-2; i >= 0; i--)
        {
            if (max_from_right < arr[i])
            {           
            max_from_right = arr[i];
            System.out.print(max_from_right + " ");
            }
        }    
    }
  
    /* Driver program to test above functions */
    public static void main(String[] args) 
    {
        LeadersInArray lead = new LeadersInArray();
        int arr[] = new int[]{16, 17, 4, 3, 5, 2};
        int n = arr.length;
        lead.printLeaders(arr, n);
    }
}


输出:

17 5 2

时间复杂度: O(n*n)
方法2(从右侧扫描)
从右到左扫描数组中的所有元素并跟踪最大值。当最大值改变它的值时,打印它。
下图是上述方法的试运行:

下面是上述方法的实现:

Java

class LeadersInArray 
{
    /* Java Function to print leaders in an array */
    void printLeaders(int arr[], int size)
    {
        int max_from_right =  arr[size-1];
   
        /* Rightmost element is always leader */
        System.out.print(max_from_right + " ");
       
        for (int i = size-2; i >= 0; i--)
        {
            if (max_from_right < arr[i])
            {           
            max_from_right = arr[i];
            System.out.print(max_from_right + " ");
            }
        }    
    }
  
    /* Driver program to test above functions */
    public static void main(String[] args) 
    {
        LeadersInArray lead = new LeadersInArray();
        int arr[] = new int[]{16, 17, 4, 3, 5, 2};
        int n = arr.length;
        lead.printLeaders(arr, n);
    }
}

输出:

2 5 17

时间复杂度: O(n)

有关详细信息,请参阅有关数组中的领导者的完整文章!