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};
    }
};
相关推荐
Omics Pro8 分钟前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
代数狂人9 分钟前
机器学习数学基础──从零开始 导读
人工智能·算法
wuminyu25 分钟前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
CoderYanger33 分钟前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
圣保罗的大教堂39 分钟前
leetcode 3524. 求出数组的 X 值 I 中等
leetcode
一只小透明啊啊啊啊40 分钟前
Socket、AIDL、SOME/IP
c++·mcu
Zane19941 小时前
暴力字符串匹配失配就要把文本指针往回拉,KMP凭什么能让它一直往前走
算法
Tim_102 小时前
【LeetCode】338、比特位计数
c++·算法·leetcode
木子算法2 小时前
不是重心也不是中点:费马—韦伯点、它的最优性条件与迭代求解
人工智能·算法·目标跟踪
程序员AlbertTu2 小时前
# Mantissa 使用教程 — Python 版与 C++ 版
c++·python·数值运算