力扣2058 链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。

链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。

如果当前节点的值 严格大于 前一个节点和后一个节点,那么这个节点就是一个 局部极大值点 。

如果当前节点的值 严格小于 前一个节点和后一个节点,那么这个节点就是一个 局部极小值点 。

注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个 局部极大值点 / 极小值点 。

给你一个链表 head ,返回一个长度为 2 的数组 [minDistance, maxDistance] ,其中 minDistance 是任意两个不同临界点之间的最小距离,maxDistance 是任意两个不同临界点之间的最大距离。如果临界点少于两个,则返回 [-1,-1] 。

【以下回答由 GPT 生成】

分析

题目要求寻找链表中的局部极大值点和局部极小值点,并计算任意两个不同临界点之间的最小距离和最大距离。这里的距离可以理解为节点的位置差。

我们可以通过遍历链表,比较当前节点与前一个节点和后一个节点的关系,来找到局部极值点。然后再计算这些局部极值点之间的距离,找到最小距离和最大距离。

解法

  1. 初始化minDistance为无穷大,maxDistance为负无穷大,表示最小距离和最大距离的初始值。
  2. 定义两个变量prevcurr,分别表示当前节点和前一个节点。
  3. 遍历链表,初始时curr指向头结点。
  4. 在循环中,判断curr是否为局部极值点:
  5. 如果prev存在,并且prev的值大于curr的值,并且curr的值小于curr的下一个节点的值,那么curr是一个局部极小值点。更新minDistancemin(minDistance, curr - prev)maxDistancemax(maxDistance, curr - prev)
  6. 如果prev存在,并且prev的值小于curr的值,并且curr的值大于curr的下一个节点的值,那么curr是一个局部极大值点。更新minDistancemin(minDistance, curr - prev)maxDistancemax(maxDistance, curr - prev)
  7. 在循环体内,更新prevcurrcurrcurr.next,继续下一次循环。
  8. 如果找到的临界点少于两个,返回[-1, -1]
  9. 返回[minDistance, maxDistance]作为结果。

代码实现

下面通过Python代码实现该算法:



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^