📜  数组中的领导者

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

数组中的领导者

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

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

C++
#include
using namespace std;
 
/*C++ 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
            cout << arr[i] << " ";
  }
}
 
/* Driver program to test above function */
int main()
{
    int arr[] = {16, 17, 4, 3, 5, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    printLeaders(arr, n);
    return 0;
}


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);
    }
}


Python3
# Python Function to print leaders in array
 
def printLeaders(arr,size):
     
    for i in range(0, size):
        for j in range(i+1, size):
            if arr[i]<=arr[j]:
                break
        if j == size-1: # If loop didn't break
            print (arr[i],end=' ')
 
# Driver function
arr=[16, 17, 4, 3, 5, 2]
printLeaders(arr, len(arr))
 
# This code is contributed by _Devesh Agrawal__


C#
// C# program to print
// leaders in array
using System;
class GFG
{
    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;
            }
             
            // the loop didn't break
            if (j == size)
                Console.Write(arr[i] + " ");
        }
    }
 
    // Driver Code
    public static void Main()
    {
        GFG lead = new GFG();
        int []arr = new int[]{16, 17, 4, 3, 5, 2};
        int n = arr.Length;
        lead.printLeaders(arr, n);
    }
}
 
// This code is contributed by
// Akanksha Rai(Abby_akku)


PHP


Javascript


C++
#include 
using namespace std;
 
/* C++ 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 */
    cout << max_from_right << " ";
     
    for (int i = size-2; i >= 0; i--)
    {
        if (max_from_right < arr[i])
        {          
            max_from_right = arr[i];
            cout << max_from_right << " ";
        }
    }   
}
 
/* Driver program to test above function*/
int main()
{
    int arr[] = {16, 17, 4, 3, 5, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    printLeaders(arr, n);
    return 0;
}


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);
    }
}


Python3
# Python function to print leaders in array
def printLeaders(arr, size):
    
    max_from_right = arr[size-1]  
    print (max_from_right,end=' ')   
    for i in range( size-2, -1, -1):       
        if max_from_right < arr[i]:       
            print (arr[i],end=' ')
            max_from_right = arr[i]
         
# Driver function
arr = [16, 17, 4, 3, 5, 2]
printLeaders(arr, len(arr))
 
# This code contributed by _Devesh Agrawal__


C#
// C# program to find Leaders in an array
using System;
 
class LeadersInArray {
     
    // C# 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
        Console.Write(max_from_right +" ");
     
        for (int i = size - 2; i >= 0; i--)
        {
            if (max_from_right < arr[i])   
            {    
                max_from_right = arr[i];
                Console.Write(max_from_right +" ");
            }
        }
    }
 
    // Driver Code
    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);
    }
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)


PHP
= 0; $i--)
    {
        if ($max_from_right < $arr[$i])   
        {        
            $max_from_right = $arr[$i];
            echo($max_from_right);
            echo(" ");
        }
    }
}
 
// Driver Code
$arr = array(16, 17, 4, 3, 5, 2);
$n = sizeof($arr);
printLeaders($arr, $n);
 
// This code is contributed
// by Shivi_Aggarwal
?>


Javascript


输出:

17 5 2

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

下面是上述方法的实现:

C++

#include 
using namespace std;
 
/* C++ 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 */
    cout << max_from_right << " ";
     
    for (int i = size-2; i >= 0; i--)
    {
        if (max_from_right < arr[i])
        {          
            max_from_right = arr[i];
            cout << max_from_right << " ";
        }
    }   
}
 
/* Driver program to test above function*/
int main()
{
    int arr[] = {16, 17, 4, 3, 5, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    printLeaders(arr, n);
    return 0;
}   

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);
    }
}

Python3

# Python function to print leaders in array
def printLeaders(arr, size):
    
    max_from_right = arr[size-1]  
    print (max_from_right,end=' ')   
    for i in range( size-2, -1, -1):       
        if max_from_right < arr[i]:       
            print (arr[i],end=' ')
            max_from_right = arr[i]
         
# Driver function
arr = [16, 17, 4, 3, 5, 2]
printLeaders(arr, len(arr))
 
# This code contributed by _Devesh Agrawal__

C#

// C# program to find Leaders in an array
using System;
 
class LeadersInArray {
     
    // C# 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
        Console.Write(max_from_right +" ");
     
        for (int i = size - 2; i >= 0; i--)
        {
            if (max_from_right < arr[i])   
            {    
                max_from_right = arr[i];
                Console.Write(max_from_right +" ");
            }
        }
    }
 
    // Driver Code
    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);
    }
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)

PHP

= 0; $i--)
    {
        if ($max_from_right < $arr[$i])   
        {        
            $max_from_right = $arr[$i];
            echo($max_from_right);
            echo(" ");
        }
    }
}
 
// Driver Code
$arr = array(16, 17, 4, 3, 5, 2);
$n = sizeof($arr);
printLeaders($arr, $n);
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript


输出:

2 5 17

时间复杂度: O(n)