首页 > 其他分享 >LeetCode2058. 找出临界点之间的最小和最大距离

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

时间:2024-11-28 22:29:12浏览次数:8  
标签:找出 LeetCode2058 val min int 临界点 && ListNode 极值

本题,有一定难度,但不大(我设了个全局变量,被坑了

题目:

本题要我们求出两个极值点最大距离以及最小距离,如果不存在则返回[-1,-1]

不难看出,最小距离只会在相邻两个极值点取得,最大值则是一头一尾,这也启发我们要设置变量,用来记录头尾极值点的位置,以及两个相邻极值点的距离

代码如下:

typedef struct ListNode ListNode;
int* nodesBetweenCriticalPoints(struct ListNode* head, int* returnSize)
{
    ListNode* p = head;  //p向前滑动
    ListNode* q = NULL; //p的前驱
    int r = 0;    //当前极值点的位置
    int l = 0;    //上一个极值点的位置
    int s = INT_MAX;  //第一个极值点的位置
    int min = INT_MAX;//两个极值点之间的最小距离
    int max = -1; //两个极值点之间的最大距离
    int i = 0; //记录当前位置

    //答案数组   PS:千万不要搞全局,会被主函数修改。。。我就被硬控了。。。
    int* a = (int*)malloc(sizeof(int) * 2);
    a[0] = -1; a[1] = -1;

    while (p->next != NULL) //去掉尾结点
    {
        i++;
        if (q != NULL) //去掉头结点
        {
            ListNode* t = p->next; //让t指向p的后驱
            if (((q->val < p->val) && (p->val > t->val)) || ((q->val > p->val) && (p->val < t->val)))//判断极值点
            {
                if (s > i) //记录第一个极值点位置
                    s = i;
                if (r > 0)
                    l = r; //记录上一个极值点位置                

                r = i;  //记录当前极值点位置
                if (l > 0 && r > 0)
                    min = (min > (r - l)) ? (r - l) : min; //维护最小距离
            }
        }
        q = p;  //向前移动
        p = p->next;
    }

    *returnSize = 2;
    if (s != INT_MAX && r != 0 && l != 0)
    {
        max = r - s;
        a[0] = min;
        a[1] = max;
    }

    return a;
}

标签:找出,LeetCode2058,val,min,int,临界点,&&,ListNode,极值
From: https://blog.csdn.net/kwslo/article/details/144121566

相关文章

  • 【C++练习】找出100到200之间不能被3整除的所有整数
    题目:找出100到200之间不能被3整除的所有整数题目描述:编写一个C程序,要求遍历100到200(包括100和200)之间的所有整数,并输出其中不能被3整除的所有整数。每个整数之间用一个空格隔开,在输出完所有满足条件的整数后,输出一个换行符。输出要求:输出100到200之间不能被3整除的所有整数......
  • 28. 找出字符串中第一个匹配项的下标 Golang实现
    题目描述:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹配。......
  • 第七章习题14-输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生的平均分
     ......
  • 在长度 2N 的数组中找出重复 N 次的元素
    给你一个整数数组 nums ,该数组具有以下属性:nums.length==2*n.nums 包含 n+1 个 不同的 元素nums 中恰有一个元素重复 n 次找出并返回重复了 n 次的那个元素。示例1:输入:nums=[1,2,3,3]输出:3示例2:输入:nums=[2,1,2,5,3,2]输出:2示例3:输入:nums......
  • 代码随想录算法训练营第九天 | Javascript | 力扣Leetcode | 手撕KMP的一天 | 28. 找
    目录前言简介题目链接:28.找出字符串中第一个匹配项的下标题目链接:459.重复的子字符串前言踏平坎坷成大道,斗罢艰险又出发!自律的尽头是自控,自控的尽头是硬控。愿道友们披荆斩棘,终能得偿所愿。简介本人是小几年经验的前端开发,算法基础只有力扣几十道题,非常薄弱。......
  • 【数据结构和算法实践-位运算-找出数组中出现K次的数,其他数出现M次】
    位运算-找出数组中出现K次的数,其他数出现M次题目MyThought代码示例JAVA-8题目一个数组中,一个数出现了K次,另外其他的数出现了M次,找出出现K次的数MyThought一、设置一个长度为32的int[]temp,把arr中的每个数都变成2进制,放入temp中1、设置长度为32的int数组2......
  • LeetCode_0028. 找出字符串第一个匹配项的下标,KMP算法的实现
    题目描述  给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹......
  • 【3.10】贪心算法-找出对应 LCP 矩阵的字符串
    一、题目对任一由n个小写英文字母组成的字符串word,我们可以定义一个nxn的矩阵,并满足:lcp[i][j]等于子字符串 word[i,...,n-1]和word[j,...,n-1]之间的最长公共前缀的长度。给你一个nxn的矩阵lcp。返回与lcp对应的、按字典序最小的字符串 word。如果......
  • 如何给定一个数组,找出其中满足勾股数的三个值?
    勾股数的定义3个正整数(a,b,c)满足a^2+b^2=c^2的关系,则称(a,b,c)为勾股数输入描述第一行为数组n,表示第二行的数组有多少元素。第二行为数组元素。输出描述每一行表示找到的勾股数。思路创建一个数组arr,对原数组a的所有元素求得平方值后,存入到arr对应的位......
  • 动态规划:找出每个位置为止最长的有效障碍赛跑路线
    目录问题定义思路解题过程复杂度code问题定义        你打算构建一些障碍赛跑路线。给你一个 下标从0开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。对于每个介于 0 和 n-1 之间(包含 0 和 n-1)的下......