# LeetCode 2058. Find the Minimum and Maximum Number of Nodes Between Critical Points https://leetcode.com/problems/find-the-minimum-and-maximum-number-of-nodes-between-critical-points/description/ ## 題目大意 找 linked list 中的 critical points 並回傳任兩 critical points 的最小距離跟最大距離 critical points 少於兩點回傳 `{-1,-1}` 題目給的 linked list 保證至少包含兩個 node ## 思考 最大距離就是 critical points 的頭尾距離 (最後找到跟最先找到的位置距離) 最小則需要一直更新比大小 ```cpp! class Solution { public: vector<int> nodesBetweenCriticalPoints(ListNode *head) { if (!head->next->next) return {-1, -1}; int minDist = INT_MAX; int maxFront = -1, maxBack = -1; int idx = 1; ListNode *prev = head; ListNode *curr = head->next; while (curr->next) { if (curr->val > prev->val && curr->val > curr->next->val || curr->val < prev->val && curr->val < curr->next->val) { if (maxFront == -1) maxFront = idx; if (maxBack != -1) minDist = min(minDist, idx - maxBack); maxBack = idx; } prev = curr; curr = curr->next; ++idx; } return minDist != INT_MAX ? vector<int>{minDist, maxBack - maxFront} : vector<int>{-1, -1}; } }; ``` `if (curr->val > prev->val && curr->val > curr->next->val || curr->val < prev->val && curr->val < curr->next->val)` 的部分是判斷是否為 critical points 其實如果有看懂題目的話,這題應該挺好寫的
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up