【Leetcode -1721.交换链表中的节点 -2058.找出临界点之间的最小和最大距离】

news/2025/3/19 10:53:34/

Leetcode

  • Leetcode -1721.交换链表中的节点
  • Leetcode -2058.找出临界点之间的最小和最大距离

Leetcode -1721.交换链表中的节点

题目:给你链表的头节点 head 和一个整数 k 。
交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。

示例 1:
输入:head = [1, 2, 3, 4, 5], k = 2
输出:[1, 4, 3, 2, 5]

示例 2:
输入:head = [7, 9, 6, 6, 7, 8, 3, 0, 9, 5], k = 5
输出:[7, 9, 6, 6, 8, 7, 3, 0, 9, 5]

示例 3:
输入:head = [1], k = 1
输出:[1]

示例 4:
输入:head = [1, 2], k = 1
输出:[2, 1]

示例 5:
输入:head = [1, 2, 3], k = 2
输出:[1, 2, 3]

提示:
链表中节点的数目是 n
1 <= k <= n <= 105
0 <= Node.val <= 100

思路:找到需要交换的两个节点,交换它们的值即可;

		struct ListNode* swapNodes(struct ListNode* head, int k){//front为交换的两个节点的前一个节点,behind为交换的两个节点的后一个节点,cur用来让两个节点找到交换的两个位置struct ListNode* front = head, * behind = head, * cur = head;//front找到交换的第一个节点while (--k){front = front->next;cur = cur->next;}//behind找到交换的第二个节点while (cur->next){cur = cur->next;behind = behind->next;}//找到两个交换的节点之后,就对它们进行换值int num = front->val;front->val = behind->val;behind->val = num;return head;}

Leetcode -2058.找出临界点之间的最小和最大距离

题目:链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。
如果当前节点的值 严格大于 前一个节点和后一个节点,那么这个节点就是一个 局部极大值点 。
如果当前节点的值 严格小于 前一个节点和后一个节点,那么这个节点就是一个 局部极小值点 。
注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个 局部极大值点 / 极小值点 。
给你一个链表 head ,返回一个长度为 2 的数组[minDistance, maxDistance] ,其中 minDistance 是任意两个不同临界点之间的最小距离,maxDistance 是任意两个不同临界点之间的最大距离。如果临界点少于两个,则返回[-1, - 1] 。

示例 1:
输入:head = [3, 1]
输出:[-1, -1]
解释:链表[3, 1] 中不存在临界点。

示例 2:
输入:head = [5, 3, 1, 2, 5, 1, 2]
输出:[1, 3]
解释:存在三个临界点:

  • [5, 3, 1, 2, 5, 1, 2]:第三个节点是一个局部极小值点,因为 1 比 3 和 2 小。
  • [5, 3, 1, 2, 5, 1, 2]:第五个节点是一个局部极大值点,因为 5 比 2 和 1 大。
  • [5, 3, 1, 2, 5, 1, 2]:第六个节点是一个局部极小值点,因为 1 比 5 和 2 小。
    第五个节点和第六个节点之间距离最小。minDistance = 6 - 5 = 1 。
    第三个节点和第六个节点之间距离最大。maxDistance = 6 - 3 = 3 。

示例 3:
输入:head = [1, 3, 2, 2, 3, 2, 2, 2, 7]
输出:[3, 3]
解释:存在两个临界点:

  • [1, 3, 2, 2, 3, 2, 2, 2, 7]:第二个节点是一个局部极大值点,因为 3 比 1 和 2 大。
  • [1, 3, 2, 2, 3, 2, 2, 2, 7]:第五个节点是一个局部极大值点,因为 3 比 2 和 2 大。
    最小和最大距离都存在于第二个节点和第五个节点之间。
    因此,minDistance 和 maxDistance 是 5 - 2 = 3 。
    注意,最后一个节点不算一个局部极大值点,因为它之后就没有节点了。

示例 4:
输入:head = [2, 3, 3, 2]
输出:[-1, -1]
解释:链表[2, 3, 3, 2] 中不存在临界点。

提示:
链表中节点的数量在范围[2, 105] 内
1 <= Node.val <= 105

思路:遍历链表,找到链表中所有的临界点,放入提前创建好的数组中;然后判断临界点的数量是否大于2,如果小于2,即返回的数组中的最小距离和最大距离都是 -1 ;如果大于2,最大距离即是数组中的最后一个减去第一个,即最大减最小;最小距离需要遍历数组,找到相邻的元素中差值最小的值;

		int* nodesBetweenCriticalPoints(struct ListNode* head, int* returnSize){struct ListNode* cur = head;//minDistance为最小距离,maxDistance为最大距离,index记录下标int minDistance = -1, maxDistance = -1, index = 1;//返回两个整型int* ret = (int*)malloc(sizeof(int) * 2);*returnSize = 2;//数组存放临界点的下标,len记录当前数组的长度int arr[100000] = { 0 };int len = 0;//每次比较前一个的val和后一个val,若符合题意就放入数组while (cur->next && cur->next->next){int x = cur->val;cur = cur->next;index++;if (cur->val > x && cur->val > cur->next->val)arr[len++] = index;else if (cur->val < x&& cur->val < cur->next->val)arr[len++] = index;}//len,数组长度大于1,据题意,即临界点要大于两个if (len > 1){//上面len多加了一次,所以要减一次len--;//maxDistance即为最大减最小maxDistance = abs(arr[len] - arr[0]);//minDistance要遍历一次数组,找出相邻之间最小的值for (int i = 1; i <= len; i++){if (i == 1)minDistance = arr[i] - arr[i - 1];minDistance = minDistance > arr[i] - arr[i - 1] ? arr[i] - arr[i - 1] : minDistance;}}ret[0] = minDistance;ret[1] = maxDistance;return ret;}

http://www.ppmy.cn/news/235530.html

相关文章

【Python】Python 练习:『技能树』① Python 简介

目录 一、练习题 二、答案解析 &#xff08;1&#xff09;正确写法 ① 写法 1 ② 写法 2 ③ 写法 3 ④ 写法 4 &#xff08;2&#xff09;错误写法 ① 写法 1 一、练习题 Hello World 贡献者&#xff1a;幻灰龙 小知识: Python的创始人为 Guido van Rossum&#x…

云卓遥控器+DIY高清摄像机的方案(完美接入原系统)

一个朋友接了一个单子&#xff0c;让我给他整合一个方案&#xff0c;飞机用的是植保飞机&#xff0c;把客户自己找的摄像机&#xff0c;放在云台上&#xff0c;能实现遥控器可以自由控制。客户原来已经买了整套飞机。拍照部分主要是下面那样的 包含了一遥控器&#xff0c;数传模…

真正的一键联控!从工业设计的角度谈iCLICK次世代遥控器的设计历程

随着智能家居技术的不断发展&#xff0c;不断增加的遥控器们让发烧友都感到头疼&#xff0c;iCLICK超遥在这个大环境下孕育而生&#xff0c;它多才多能&#xff0c;能集成所有遥控器&#xff0c;精简重组按键&#xff0c;并做到一键联控。它要定位到次世代的遥控器&#xff0c;…

关于万能遥控器 这几个问题你必须知道

本文来自智能电视网 遥控器作为电视必不可少的配件之一&#xff0c;其重要性不言而喻&#xff0c;一旦出现损坏&#xff0c;就会给生活带来很多不必要的麻烦。这时候&#xff0c;拥有一个万能遥控器就显得十分必要了。关于万能遥控器&#xff0c;有几个问题&#xff0c;我想你…

【STM32F4系列】【自制库】读取并模拟遥控插座的遥控器

目录 需求分析 信号分析 载波类型寻找 信号获取 解码 思路 初始化 GPIO 外部中断 定时器 解释 代码 发送 思路 初始化 代码 成品 需求分析 前段时间入手了一个遥控插座&#xff0c;因为要在两处控制它&#xff0c;懒得拿着遥控器到处跑&#xff0c;因此萌生了…

学习型红外遥控器硬件结构说明

本篇文章上接&#xff1a;智能家居中红外遥控芯片分析比较 2 硬件结构 学习型红外遥控器由红外一体化接收电路、 反相器、温度传感器、AT89C52单片机、红外发送电路、E PROM存储器、键盘及 LCD显示器和数据通信模块组成&#xff0c;如图 1所示。 图 1 遥控器硬件结构框 图 (…

【测试】更新红外遥控信号读取,用示波器抓取红外遥控器NEC信号

最近群里有问红外信号采集相关问题&#xff0c;我以为他问arduino&#xff0c;原来他问米思齐&#xff0c;然后我居然忘了之前我用米思齐也试过。今天再把资料整理一下&#xff0c;备战新项目。 红外遥控器应用非常广泛&#xff0c;大部分家电都使用它来控制 &#xff0c;具有价…

红外线遥控器解码原理

红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点&#xff0c;因而&#xff0c;继彩电、录像机之后&#xff0c;在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中&#…