生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2058. 找出临界点之间的最小和最大距离(链表)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
1. 題目
鏈表中的 臨界點 定義為一個 局部極大值點 或 局部極小值點 。
如果當前節點的值 嚴格大于 前一個節點和后一個節點,那么這個節點就是一個 局部極大值點 。
如果當前節點的值 嚴格小于 前一個節點和后一個節點,那么這個節點就是一個 局部極小值點 。
注意:節點只有在同時存在前一個節點和后一個節點的情況下,才能成為一個 局部極大值點 / 極小值點 。
給你一個鏈表 head ,返回一個長度為 2 的數組 [minDistance, maxDistance] ,其中 minDistance 是任意兩個不同臨界點之間的最小距離,maxDistance 是任意兩個不同臨界點之間的最大距離。
如果臨界點少于兩個,則返回 [-1,-1] 。
示例 1:
輸入:head
= [3,1]
輸出:
[-1,-1]
解釋:鏈表
[3,1] 中不存在臨界點。
示例 2:
輸入:head
= [5,3,1,2,5,1,2]
輸出:
[1,3]
解釋:存在三個臨界點:
- [5,3,1,2,5,1,2]:第三個節點是一個局部極小值點,因為
1 比
3 和
2 小。
- [5,3,1,2,5,1,2]:第五個節點是一個局部極大值點,因為
5 比
2 和
1 大。
- [5,3,1,2,5,1,2]:第六個節點是一個局部極小值點,因為
1 比
5 和
2 小。
第五個節點和第六個節點之間距離最小。minDistance
= 6 - 5 = 1 。
第三個節點和第六個節點之間距離最大。maxDistance
= 6 - 3 = 3 。
示例 3:
輸入:head
= [1,3,2,2,3,2,2,2,7]
輸出:
[3,3]
解釋:存在兩個臨界點:
- [1,3,2,2,3,2,2,2,7]:第二個節點是一個局部極大值點,因為
3 比
1 和
2 大。
- [1,3,2,2,3,2,2,2,7]:第五個節點是一個局部極大值點,因為
3 比
2 和
2 大。
最小和最大距離都存在于第二個節點和第五個節點之間。
因此,minDistance 和 maxDistance 是
5 - 2 = 3 。
注意,最后一個節點不算一個局部極大值點,因為它之后就沒有節點了。
示例 4:
輸入:head
= [2,3,3,2]
輸出:
[-1,-1]
解釋:鏈表
[2,3,3,2] 中不存在臨界點。提示:
鏈表中節點的數量在范圍
[2, 10^5] 內
1 <= Node
.val
<= 10^5
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-the-minimum-and-maximum-number-of-nodes-between-critical-points
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution {
public:vector
<int> nodesBetweenCriticalPoints(ListNode
* head
) {ListNode
*prev
= NULL, *cur
= head
, *next
= head
->next
;int first
= -1, ct
= 0, prevpos
= -1, curpos
= -1, mindis
= INT_MAX
;while(cur
){ct
++;next
= cur
->next
;if(prev
&& cur
->next
&& ((prev
->val
> cur
->val
&& next
->val
> cur
->val
)|| (prev
->val
< cur
->val
&& next
->val
< cur
->val
))){curpos
= ct
;if(first
== -1)first
= ct
;if(prevpos
!= -1)mindis
= min(mindis
, curpos
-prevpos
);prevpos
= curpos
;}prev
= cur
;cur
= cur
->next
;}if(mindis
== INT_MAX
) return {-1, -1};return {mindis
, curpos
-first
};}
};
180 ms 110.6 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2058. 找出临界点之间的最小和最大距离(链表)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。