当前位置: 首页 > 面试题库 >

在数组中查找引线leaders

皇甫飞飙
2023-03-14
问题内容

我们需要打印数组中存在的所有leaders。如果元素大于元素的右侧,则元素是领导者。
例如:

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

问题答案:

使用两个循环。外循环迭代数组元素,内循环检查数组的正确元素。如果当前元素大于右侧元素,则它是leaders。
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:
让我们找到更优化的解决方案
我们将使用最右边的元素始终是leaders的属性。

我们将从最右边的元素开始并跟踪最大值。
每当我们获得新的最大值时,该元素就是leaders。
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)

在数组中查找leaders的 Java 程序:

package org.arpit.java2blog;

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


 类似资料:
  • 问题内容: 我有一个看起来像这样的表: 还有其他几列与此问题无关。将它们存储为JSON是有原因的。 我要尝试的是查找具有特定 艺术家姓名 (精确匹配)的曲目。 我正在使用此查询: 例如 但是,这会进行全表扫描,而且速度不是很快。我尝试使用function创建一个GIN索引,并使用,但是未使用该索引,查询实际上要慢得多。 问题答案: 在Postgres 9.4+ 使用新的二进制JSON数据类型 ,P

  • 程序员经常要处理数组中存放的大量数据,可能需要确定数组是否包含符合某关键值(key value)的值。寻找数组中某个元素的过程称为查找(searching)。本节介绍两个查找方法:简单的线性查找(liner search)方法和更复杂的折半查找(binary search)方法。练习4.33和练习4.34要求用递归法实现线性查找与折半查找。 图4.19 的线性查找比较数组中每个元素与查找键(sea

  • 如果我从问题中选择“q1”,我如何从答案中选择第一个数组? 这是我现在的代码:

  • 对于这个任务,我认为我做对了,但是当我在网上提交时,即使我用Eclipse检查过,它也没有把它列为正确的。 提示: 写一个方法isPalinene,它接受一个Strings数组作为它的参数,如果该数组是回文(如果它向前读取和向后读取相同),则返回true,如果不是,则返回 /false。例如,数组{"alpha"、"beta"、"gamma"、"delta"、"gamma"、"beta"、"alp

  • 问题内容: 我有一个看起来像这样的表: 还有其他几列与此问题无关。将它们存储为JSON是有原因的。 我想做的是查找具有特定 艺术家姓名 (精确匹配)的曲目。 我正在使用此查询: 例如 但是,这会进行全表扫描,而且速度不是很快。我尝试使用function创建一个GIN索引,并使用,但是未使用该索引,查询实际上要慢得多。 问题答案: 在Postgres 9.4+ 使用新的二进制JSON数据类型 ,Po

  • 我有一张这样的桌子: 还有其他几个专栏与这个问题无关。将它们存储为JSON是有原因的。 我想做的是查找一首具有特定艺术家名称(精确匹配)的曲目。 我正在使用此查询: 举个例子 但是,这会进行全表扫描,而且速度不是很快。我尝试使用函数创建GIN索引,并使用,但是没有使用索引并且查询实际上显着变慢。