Java查找数组中的领导者

时间:2020-02-23 14:34:10  来源:igfitidea点击:

问题:

我们需要打印阵列中存在的所有领导者。
如果一个元素大于它右边的所有元素,那么它就是领导者。
例如:

arr[]={14, 12, 70, 15, 99, 65, 21, 90}
Here 99 and 90 are leader elements

解决方案:

解决方案1:

使用两个循环。
外循环迭代数组元素和内循环以检查阵列的右键。
如果当前元素大于右元素,而不是它是领导者。
Java代码:

public static void findLeadersInAnArrayBruteForce(int arr[])
 {
 System.out.println("Finding leaders in an array using brute force : ");
 for (int i = 0; i < arr.length; i++) {
 boolean isLeader=true;
 for (int j = i+1; j < arr.length; j++) {
 if(arr[i] <= arr[j])
 { 
 isLeader=false;
 break;
 } 
 }
 if(isLeader)
 System.out.print(arr[i]+" ");
 }
 }

时间复杂性:o(n ^ 2)

解决方案2:

让我们找到更优化的解决方案,我们将使用最右边元素的属性永远是一个领导者。

  • 我们将从最右边的元素和轨道开始。
  • 每当我们获得新的最大时,那个元素就是一个领导者。

Java代码:

public static void findLeadersInAnArray(int arr[])
 {
  System.out.println("Finding leaders in an array : ");
  int rightMax=arr[arr.length-1];
  //Rightmost will always be a leader
  System.out.print(rightMax+" ");
  for (int i = arr.length-2; i>=0; i--) {
   if(arr[i] > rightMax)
   {
    rightMax=arr[i];
    System.out.print(" "+rightMax);
   }
  }
 }

时间复杂性:o(n)

Java程序查找阵列中的领导者:

package org.igi.theitroad;
 
public class FindLeadersInArrayMain {
 
 public static void main(String[] args) {
  int arr[]={14, 12, 70, 15, 99, 65, 21, 90};
  findLeadersInAnArrayBruteForce(arr);
  System.out.println("n==================");
  findLeadersInAnArray(arr);
 }
 
 public static void findLeadersInAnArrayBruteForce(int arr[])
 {
  System.out.println("Finding leaders in an array using brute force : ");
  for (int i = 0; i < arr.length; i++) {
   boolean isLeader=true;
   for (int j = i+1; j < arr.length; j++) {
    if(arr[i] <= arr[j])
    { 
     isLeader=false;
     break;
    }    
   }
   if(isLeader)
    System.out.print(arr[i]+" ");
  }
 }
 
 public static void findLeadersInAnArray(int arr[])
 {
  System.out.println("Finding leaders in an array : ");
  int rightMax=arr[arr.length-1];
  //Rightmost will always be a leader
  System.out.print(rightMax+" ");
  for (int i = arr.length-2; i>=0; i--) {
   if(arr[i] > rightMax)
   {
    rightMax=arr[i];
    System.out.print(" "+rightMax);
   }
  }
 }
 
}

运行上面的程序时,我们将得到以下输出:

Finding leaders in an array using brute force
99 90 
==================
Finding leaders in an array : 
90  99