📌  相关文章
📜  在每个数组元素的左侧计算更大的元素(1)

📅  最后修改于: 2023-12-03 15:08:03.842000             🧑  作者: Mango

在每个数组元素的左侧计算更大的元素

问题描述:

给定一个数组,对于每个元素,计算在它左侧的比它大的元素的数量。

示例:

输入: [8, 3, 6, 9, 2] 输出: [0, 1, 1, 3, 0]

解释: 对于第一个元素,左侧没有比它大的元素,所以为0; 对于第二个元素,只有第一个元素比它大,所以为1; 对于第三个元素,只有第一个元素比它大,所以为1; 对于第四个元素,第一、三、四个元素比它大,所以为3; 对于第五个元素,左侧没有比它大的元素,所以为0。

一种解法:

从数组末尾开始往前遍历,用一个变量来记录当前遍历过的最大值,当遇到一个新的数时,如果这个数比最大值小,则这个数左侧的比它大的数就是记录过的最大值的下标;否则,就更新最大值的下标,继续向前遍历。

代码实现:

def greater_number(nums):
    max_index = len(nums) - 1
    result = [0] * len(nums)
    for i in range(len(nums) - 1, -1, -1):
        if nums[i] < nums[max_index]:
            result[i] = max_index - i
        else:
            max_index = i
    return result

时间复杂度为 O(n),空间复杂度为 O(n)。

这个问题可以帮助我们训练对数组的遍历和记录变量的能力,也可以培养我们思考问题的能力,拓展我们的思路。