📌  相关文章
📜  给定链表中峰之间的最大距离(1)

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

给定链表中峰之间的最大距离

链表中的峰是指节点值大于其前面和后面节点值的节点,如下图所示:

peak example

给定一个链表,找到链表中任意两个峰之间的最大距离。

思路

对于该问题,我们可以通过以下步骤来解决:

  1. 找到链表中的所有峰,存储在一个列表中。
  2. 对峰的列表进行遍历,计算相邻峰之间的距离并找到最大值。

具体实现需要注意以下几点:

  • 遍历链表时需要比较当前节点值与前后节点值的大小,判断是否为峰。
  • 在计算相邻峰之间的距离时,需要注意当前峰是整个链表的第一个或最后一个峰的情况。
代码实现

下面给出使用 Python 语言实现该功能的代码:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def findPeakDistance(head: ListNode) -> int:
    # 寻找所有峰
    peaks = []
    cur = head
    while cur and cur.next:
        if cur.val > cur.next.val:
            peaks.append(cur)
        cur = cur.next
    if cur:
        peaks.append(cur)

    # 计算相邻峰之间的距离
    max_distance = 0
    for i in range(1, len(peaks)):
        # 注意首尾峰之间的距离不能算
        if i == 1:
            max_distance = peaks[i].val - peaks[i-1].val
        else:
            max_distance = max(max_distance, peaks[i].val - peaks[i-1].val)
    return max_distance
时间复杂度

该算法需要遍历整个链表,时间复杂度为 $O(n)$,其中 $n$ 是链表节点数。

空间复杂度

该算法使用了一个峰的列表,最多存储 $n$ 个峰,空间复杂度为 $O(n)$。