Skip to content

Commit 93d20bf

Browse files
committed
feat: add 2058
1 parent 0ee9a8d commit 93d20bf

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# 2058. Find the Minimum and Maximum Number of Nodes Between Critical Points
2+
3+
- Difficulty: Medium.
4+
- Related Topics: Linked List.
5+
- Similar Questions: .
6+
7+
## Problem
8+
9+
A **critical point** in a linked list is defined as **either** a **local maxima** or a **local minima**.
10+
11+
A node is a **local maxima** if the current node has a value **strictly greater** than the previous node and the next node.
12+
13+
A node is a **local minima** if the current node has a value **strictly smaller** than the previous node and the next node.
14+
15+
Note that a node can only be a local maxima/minima if there exists **both** a previous node and a next node.
16+
17+
Given a linked list `head`, return **an array of length 2 containing **`[minDistance, maxDistance]`** where **`minDistance`** is the **minimum distance** between **any two distinct** critical points and **`maxDistance`** is the **maximum distance** between **any two distinct** critical points. If there are **fewer** than two critical points, return **`[-1, -1]`.
18+
19+
 
20+
Example 1:
21+
22+
![](https://assets.leetcode.com/uploads/2021/10/13/a1.png)
23+
24+
```
25+
Input: head = [3,1]
26+
Output: [-1,-1]
27+
Explanation: There are no critical points in [3,1].
28+
```
29+
30+
Example 2:
31+
32+
![](https://assets.leetcode.com/uploads/2021/10/13/a2.png)
33+
34+
```
35+
Input: head = [5,3,1,2,5,1,2]
36+
Output: [1,3]
37+
Explanation: There are three critical points:
38+
- [5,3,1,2,5,1,2]: The third node is a local minima because 1 is less than 3 and 2.
39+
- [5,3,1,2,5,1,2]: The fifth node is a local maxima because 5 is greater than 2 and 1.
40+
- [5,3,1,2,5,1,2]: The sixth node is a local minima because 1 is less than 5 and 2.
41+
The minimum distance is between the fifth and the sixth node. minDistance = 6 - 5 = 1.
42+
The maximum distance is between the third and the sixth node. maxDistance = 6 - 3 = 3.
43+
```
44+
45+
Example 3:
46+
47+
![](https://assets.leetcode.com/uploads/2021/10/14/a5.png)
48+
49+
```
50+
Input: head = [1,3,2,2,3,2,2,2,7]
51+
Output: [3,3]
52+
Explanation: There are two critical points:
53+
- [1,3,2,2,3,2,2,2,7]: The second node is a local maxima because 3 is greater than 1 and 2.
54+
- [1,3,2,2,3,2,2,2,7]: The fifth node is a local maxima because 3 is greater than 2 and 2.
55+
Both the minimum and maximum distances are between the second and the fifth node.
56+
Thus, minDistance and maxDistance is 5 - 2 = 3.
57+
Note that the last node is not considered a local maxima because it does not have a next node.
58+
```
59+
60+
 
61+
**Constraints:**
62+
63+
64+
65+
- The number of nodes in the list is in the range `[2, 105]`.
66+
67+
- `1 <= Node.val <= 105`
68+
69+
70+
71+
## Solution
72+
73+
```javascript
74+
/**
75+
* Definition for singly-linked list.
76+
* function ListNode(val, next) {
77+
* this.val = (val===undefined ? 0 : val)
78+
* this.next = (next===undefined ? null : next)
79+
* }
80+
*/
81+
/**
82+
* @param {ListNode} head
83+
* @return {number[]}
84+
*/
85+
var nodesBetweenCriticalPoints = function(head) {
86+
var firstPoint = -1;
87+
var lastPoint = -1;
88+
var last = null;
89+
var now = head;
90+
var i = 0;
91+
var minDistance = Number.MAX_SAFE_INTEGER;
92+
while (now) {
93+
if (last && now.next && ((now.val > last.val && now.val > now.next.val) || (now.val < last.val && now.val < now.next.val))) {
94+
if (firstPoint === -1) firstPoint = i;
95+
if (lastPoint !== -1) minDistance = Math.min(minDistance, i - lastPoint);
96+
lastPoint = i;
97+
}
98+
last = now;
99+
now = now.next;
100+
i += 1;
101+
}
102+
if (firstPoint !== -1 && lastPoint !== -1 && lastPoint !== firstPoint) {
103+
return [minDistance, lastPoint - firstPoint];
104+
}
105+
return [-1, -1];
106+
};
107+
```
108+
109+
**Explain:**
110+
111+
nope.
112+
113+
**Complexity:**
114+
115+
* Time complexity : O(n).
116+
* Space complexity : O(n).

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy