链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。
如果当前节点的值 严格大于 前一个节点和后一个节点,那么这个节点就是一个 局部极大值点 。
如果当前节点的值 严格小于 前一个节点和后一个节点,那么这个节点就是一个 局部极小值点 。
注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个 局部极大值点 / 极小值点 。
给你一个链表 head ,返回一个长度为 2 的数组 [minDistance, maxDistance] ,其中 minDistance 是任意两个不同临界点之间的最小距离,maxDistance 是任意两个不同临界点之间的最大距离。如果临界点少于两个,则返回 [-1,-1] 。
【以下回答由 GPT 生成】
题目要求寻找链表中的局部极大值点和局部极小值点,并计算任意两个不同临界点之间的最小距离和最大距离。这里的距离可以理解为节点的位置差。
我们可以通过遍历链表,比较当前节点与前一个节点和后一个节点的关系,来找到局部极值点。然后再计算这些局部极值点之间的距离,找到最小距离和最大距离。
minDistance
为无穷大,maxDistance
为负无穷大,表示最小距离和最大距离的初始值。prev
和curr
,分别表示当前节点和前一个节点。curr
指向头结点。curr
是否为局部极值点:prev
存在,并且prev
的值大于curr
的值,并且curr
的值小于curr
的下一个节点的值,那么curr
是一个局部极小值点。更新minDistance
为min(minDistance, curr - prev)
,maxDistance
为max(maxDistance, curr - prev)
。prev
存在,并且prev
的值小于curr
的值,并且curr
的值大于curr
的下一个节点的值,那么curr
是一个局部极大值点。更新minDistance
为min(minDistance, curr - prev)
,maxDistance
为max(maxDistance, curr - prev)
。prev
为curr
,curr
为curr.next
,继续下一次循环。[-1, -1]
。[minDistance, maxDistance]
作为结果。下面通过Python代码实现该算法:
【相关推荐】