/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
vector<int> nodesBetweenCriticalPoints(ListNode* head) {
vector<int> res;
int pre_id = 0,current_id = pre_id + 1,next_id = current_id + 1;
int maxdistance = 0,mindistance = 1e5 + 10;
int num = 0,begin_id,last_id;//num表示局部极值点的个数
ListNode* pre = head;
ListNode* cur = head->next;
ListNode* nex = cur->next;
while(pre && cur && nex){
if ((cur->val < pre->val && cur->val < nex->val) || (cur->val > pre->val && cur->val > nex->val)){
if(num == 0){
num ++;
begin_id = current_id;
last_id = current_id;
}
else {
num ++;
if (current_id - begin_id >= maxdistance){
maxdistance = current_id - begin_id;
}
if (current_id - last_id <= mindistance){
mindistance = current_id - last_id;
}
last_id = current_id;
}
}
pre = pre->next;
cur = cur->next;
nex = nex->next;
current_id ++;
next_id ++;
pre_id ++;
}
if (num <= 1) {
res.push_back(-1);
res.push_back(-1);
}
else {
res.push_back(mindistance);
res.push_back(maxdistance);
}
return res;
}
};
leetcode 265周赛 找出临界点之间的最小和最大距离
最新推荐文章于 2024-06-14 05:44:12 发布