小编Den*_*nis的帖子

通过在 O(n) 或更短的时间内从列表中的任何索引开始,两只青蛙可以创建的最大距离?

我想知道是否可以在 O(n) 或更短的时间内完成这个挑战。描述如下:

青蛙跳

2 只青蛙可以从给定的 input_array 中的任何索引开始。该函数应该返回这些青蛙可以在它们之间创建的最大可能距离(两者的索引值之间的差异),让它们彼此跳得更远。

青蛙只能跳到更高值的元素或一些相同高度的元素上,它们不能跳过任何元素。

输入:[1, 5, 5, 2, 6]

输出:3。最大距离 3 是通过生成位置 3(0 索引)和左青蛙跳到索引 1 和右青蛙跳到索引 4 来创建的。

len(input_array) 介于 2 和 200 000 之间。数组中的值是介于 1 和 1 000 000 000 之间的整数。

实际上,这里的挑战似乎是找到最长的连续子序列,使其首先不增加,然后不减少(行为的变化点是开始索引)。这似乎是最高和子阵列任务的变体。

我最好的解决方案是 O(n log n) 通过迭代数组中的所有索引并携带一个max_value来检查两只青蛙可以从该迭代的索引跳多远。

这可以在 O(n) 或更少的时间复杂度内完成吗?


[解决] 谢谢大家的回复。这是一次性解决方案的 Python 实现:

def one_pass_solution(array: List[int]) -> int:
    current_peak_index = 0
    previous_peak_index = 0
    repeat_peaks = 0
    max_distance = 0
    is_going_up = False
    for i in range(len(array) - 1):
        this_height, next_height …
Run Code Online (Sandbox Code Playgroud)

python sub-array contiguous

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

contiguous ×1

python ×1

sub-array ×1