C++ 数组中的领导者

2024年8月28日 | 阅读 4 分钟

数组中某个元素,如果它大于或等于其右侧的所有元素,则该元素被称为数组的领导者(leader)

根据这个定义,最右侧的元素永远是领导者。这就是对数组中领导者问题的基本解释。

在计算机科学中,数组中的领导者是指那些大于或等于其右侧所有元素的项。换句话说,领导者是数组中在其右侧所有元素中值最大的元素。由于领导者经常出现在各种算法挑战中,因此找到它们可能是一项有效的操作。

数组中的领导者代表什么?

数组中的领导者是指相对于其右侧所有其他项而言最大的一个或多个元素。这意味着最右边的元素永远是领导者。因此,如果一个元素大于其右侧的每个元素,它就被视为领导者。这可以借助循环来实现。我们可以使用两个循环来获取领导者元素。外层循环从左到右逐个选择元素,范围从 0size-1。内层循环将选定的元素与其右侧的每个元素进行比较。如果选定的元素是其右侧所有元素中最大的,那么它就是领导者。

暴力解法使用嵌套循环来解决这个数组中的领导者问题,以逐一检查每个元素。外层循环帮助从 0 遍历到 N - 1,而内层循环则帮助检查该特定元素的所有右侧元素。如果满足成为领导者的先决条件,则会打印该元素。

算法

第 1 步:创建方法 "getResult",它将接收两个参数:输入数组和数组的大小,范围都在 "N" 以内。

第 2 步:使用 "for" 循环和变量 "i"0 迭代到数组的大小;内层 "for" 循环将从 i + 1 迭代到数组的大小。

第 3 步:如果数组中第 i 个位置的元素右侧存在一个大于该位置元素的元素,则结束内层循环。

第 4 步:如果 "j" 的值等于数组的大小,则第 i 个位置的元素是领导者元素,我们将打印它。否则,我们忽略该领导者元素并继续打印其余元素。

程序

让我们以一个例子来演示 C++ 中数组的领导者

输出

Leaders in the array are: 2 5 17

说明

  1. 给定一个整数输入向量,findLeaders 函数会找到其中的领导者。
  2. 它首先假设数组最右侧的成员是数组的领导者 (leader = arr[n - 1])
  3. 下一步是从右到左(从 n-2 到 0)遍历数组,检查每个元素是否大于或等于当前的领导者。
  4. 如果当前元素大于或等于领导者,它会更新领导者并打印该元素。
  5. 由于我们从最右边的元素开始,所以领导者会以相反的顺序打印出来。
  6. 在主函数中,使用示例数组 16, 17, 4, 3, 5, 2 调用 findLeaders 函数。结果将是:数组中的领导者是:2 5 17
  7. 因此,在这个例子中,领导者是 2、5 和 17,因为它们都大于或等于其右侧数组中的所有项。

上述方法以 O(n) 的时间复杂度找到数组中的领导者,其中 n 是数组的元素数量。这是因为您只对数组进行了一次从右到左的遍历。