Leetcode2058 找出临界点之间的最小和最大距离

一、问题描述

二、解题思路

本题的思路比较明显,可以使用模拟的方法来解决这个问题。

(1)首先,遍历链表,记录极大值点和极小值点的下标,将其按顺序放入Index向量中;

(2)链表遍历完毕后检查Index向量:

<1>如果Index.size()<2,直接返回{-1,-1};

<2>否则,查找minDistance和maxDistance,再返回;

(3)maxDistance等于Index.back()-Index0,minDistance需要遍历Index向量,寻找相邻两个元素最小的差值(贪心)。**其实可以加一点小小的优化,如果minDistance已经为1了,那就不用再查找了。**最后返回{minDistance,maxDistance}即可。

三、代码实现

cpp 复制代码
/**
 * 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> Index;
        int index=0;
        ListNode * cur=head->next;
        ListNode * front=head;
        ListNode * behind=nullptr;
        while((cur!=nullptr)&&(cur->next!=nullptr)){
            index++;behind=cur->next;
            if(front->val>cur->val&&behind->val>cur->val) Index.push_back(index);
            else if(front->val<cur->val&&behind->val<cur->val) Index.push_back(index);
            front=cur;cur=cur->next;
        }
        //特殊情况处理
        if(Index.size()<2) return {-1,-1};
        //最大距离
        int maxDistance=Index.back()-Index[0];
        int minDistance=INT_MAX;
        for(int i=0;i!=Index.size()-1;i++){
            minDistance=min(minDistance,Index[i+1]-Index[i]);
        }
        return {minDistance,maxDistance};
    }
};
相关推荐
dialect_1 小时前
KMP算法
开发语言·c++·算法
reikocao1 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz2 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·2 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
文丑颜不良啊2 小时前
LeetCode1481~1500题目解析
java·leetcode
ShineWinsu3 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
文丑颜不良啊3 小时前
LeetCode1381~1400题目解析
java·leetcode
傲世仙尊3 小时前
多态-虚表才活到运行期符号表早已消失
c++
chenbingjie_c3 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫3 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法