阵列的领导者

时间:2009-04-06 09:29:13

标签: algorithm

考虑一个数组元素X是数组的领导者之一,如果该数组元素之后的所有元素都小于或等于数组元素X ...那么找到所有领导者的最佳算法是什么?阵列

数组可能有更多的领导者..考虑以下数组[10 9 8 6]然后10,9,8是数组的领导者

5 个答案:

答案 0 :(得分:12)

从阵列的右端开始工作,跟踪您遇到的最大值。每当最大值增加或等于时,该元素就是您定义的领导者。更重要的是,无论左边发生了什么,它都会成为领导者 - 换句话说,你添加到列表中的每个领导者都是真正的领导者,而不仅仅是候选人,因为你从左到右工作。

答案 1 :(得分:0)

在处理数组/列表时维护可能的领导者列表。此列表自然按降序排序。每个新元素都是可能的新领导者。如果它比最后找到的可能的领导者更大,那么你必须消除比这个新的可能领导者更小的所有领导者并将其附加到现在被截断的列表中。否则,只需将其附加到可能的领导者列表中。

的Python:

def findleaders(array):
    leaders = []
    for element in array:
        if element < leaders[-1]:
            # new possible leader
            leaders.append(element)
        else:
            # remove false possible leaders
            while leaders[-1] < element:
                leaders.pop()
                if not leaders: break #stop when list is empty
            leaders.append(element)
    return leaders

答案 2 :(得分:0)

在Haskell中它看起来像

 leaders [] = [];

leaders (a:as)
          | all (a>) as = a : leaders as
          | otherwise   = leaders as

列出名单的领导者名单。

  • 空列表的领导者列表为空
  • 如果列表的第一个元素是领导者,那么这也是领导者列表中的第一个元素。

应该很容易适应数组。

答案 3 :(得分:0)

来自David M的算法

int max = a[LAST_INDEX]
for( int i = a[LAST_INDEX-1] ; i >=0 ; i-- ) {
 if( a[i] > max ) 
 {      
   printf("%d",a[i]);
   max = a[i];
 }
}  

答案 4 :(得分:0)

解决问题的算法:

从正确跟踪最大元素(currentLeader)开始。如果找到更大的元素,则打印它并将currentLeader设置为当前元素。 我们可以认为最后一个元素是一个领导者,因为它没有元素。

https://www.tuturself.com/posts/view?menuId=82&postId=943