【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】

news/2024/11/26 2:01:52/

Leetcode

  • Leetcode -2181.合并零之间的节点
  • Leetcode -2326.螺旋矩阵Ⅳ

Leetcode -2181.合并零之间的节点

题目:给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。
对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0 。
返回修改后链表的头节点 head 。

示例 1:
输入:head = [0, 3, 1, 0, 4, 5, 2, 0]
输出:[4, 11]
解释:
上图表示输入的链表。修改后的链表包含:

  • 标记为绿色的节点之和:3 + 1 = 4
  • 标记为红色的节点之和:4 + 5 + 2 = 11

示例 2:
输入:head = [0, 1, 0, 3, 0, 2, 2, 0]
输出:[1, 3, 4]
解释:
上图表示输入的链表。修改后的链表包含:

  • 标记为绿色的节点之和:1 = 1
  • 标记为红色的节点之和:3 = 3
  • 标记为黄色的节点之和:2 + 2 = 4

提示:
列表中的节点数目在范围[3, 2 * 105] 内
0 <= Node.val <= 1000
不 存在连续两个 Node.val == 0 的节点
链表的 开端 和 末尾 节点都满足 Node.val == 0

思路:思路是双指针,一个 prev 指针记录两个零节点之间的和;另外一个 tail 指针一开始从头的 next 开始走,走到下一个零节点停下来,遍历过程中,prev 累加 tail 遍历过的非零节点;当 tail 遍历到零节点,prev 的next 接到 tail ,prev 再到下一个零节点开始,一直循环,直到 tail 为空;当 tail 为空,prev 还没有为空,所以直接将 prev 置空即可;

		struct ListNode* mergeNodes(struct ListNode* head){struct ListNode* prev = head, * tail = head->next;while (tail){//prev 从头开始,因为头节点的 val 等于0,所以 prev 就从头开始记录两个零节点之间的和//每当 tail 指向 0 的节点,prev的next就接上tail,然后prev往后走,就是到了当前tail的val为 0 的节点,继续记录两个零节点之间的和if (tail->next && tail->val == 0){prev->next = tail;prev = prev->next;}//如果 tail 还没到零节点,prev的val就累加tail遍历过的节点的valprev->val += tail->val;tail = tail->next;}//当tail走到空,prev还没到空,将prev的next置空即可prev->next = NULL;return head;}

Leetcode -2326.螺旋矩阵Ⅳ

题目:给你两个整数:m 和 n ,表示矩阵的维数。
另给你一个整数链表的头节点 head 。
请你生成一个大小为 m x n 的螺旋矩阵,矩阵包含链表中的所有整数。链表中的整数从矩阵 左上角 开始、顺时针 按 螺旋 顺序填充。如果还存在剩余的空格,则用 - 1 填充。
返回生成的矩阵。

示例 1:
输入:m = 3, n = 5, head = [3, 0, 2, 6, 8, 1, 7, 9, 4, 2, 5, 5, 0]
输出: [[3, 0, 2, 6, 8], [5, 0, -1, -1, 1], [5, 2, 4, 9, 7]]
解释:上图展示了链表中的整数在矩阵中是如何排布的。
注意,矩阵中剩下的空格用 - 1 填充。

示例 2:
输入:m = 1, n = 4, head = [0, 1, 2]
输出: [[0, 1, 2, -1]]
解释:上图展示了链表中的整数在矩阵中是如何从左到右排布的。
注意,矩阵中剩下的空格用 - 1 填充。

提示:
1 <= m, n <= 105
1 <= m * n <= 105
链表中节点数目在范围[1, m * n] 内
0 <= Node.val <= 1000

思路*:先将矩阵中的元素初始化为 -1 ,使用指针 cur 遍历链表, xi 和 xj 呈顺时针螺旋趋势遍历二维数组,xi 和 xj 每遍历完一行或者一列,需要做相应的操作改变方向继续遍历;

		int** spiralMatrix(int m, int n, struct ListNode* head, int* returnSize, int** returnColumnSizes){//返回的二级指针int** ret = (int**)malloc(sizeof(int*) * m);//因为返回的列数也是个二维指针,题意是要返回每一行的元素个数,即列数*returnColumnSizes = (int*)malloc(sizeof(int) * m);*returnSize = m;//将二维数组中的值初始化为 -1;并将返回的列数的二维指针的数组填充for (int i = 0; i < m; i++){ret[i] = (int*)malloc(sizeof(int) * n);memset(ret[i], -1, sizeof(int) * n);(*returnColumnSizes)[i] = n;}//cur 遍历链表struct ListNode* cur = head;for (int i = 0, j = 0; i < m, j < n; i++, j++){//xi 和 xj 呈顺时针螺旋趋势遍历二维数组int xi = i, xj = j;//向右while (xj < n && cur){ret[xi][xj++] = cur->val;cur = cur->next;}xj--;   //xj 当前超出列的长度,需要减1xi++;   //从第下一行开始,xi 需要加1//向下while (xi < m && cur){ret[xi++][xj] = cur->val;cur = cur->next;}xi--;   //xi 当前超出行的长度,需要减1xj--;   //从上一列开始, xj 需要减1//向左while (xj > j && cur){ret[xi][xj--] = cur->val;cur = cur->next;}//向上while (xi > i && cur){ret[xi--][xj] = cur->val;cur = cur->next;}//xi 和 xj 遍历完一圈后,m和n都要减1,因为遍历完相当于二维数组少了一圈m--;n--;}return ret;}

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

相关文章

【Python基础】Python函数(匿名函数)

文章目录 匿名函数函数作为参数传递小结 lambda匿名函数小结 匿名函数 函数作为参数传递 在前面的函数学习中&#xff0c;一种使用的函数&#xff0c;都是接受数据作为参数传入&#xff1a; 数字字符串字典、列表、元组等 其实&#xff0c;我们学习的函数本身&#xff0c;也…

[效率提升]vscode+copilot

1&#xff0c;安装最新版本的vscode&#xff1b; https://code.visualstudio.com/docs/getstarted/introvideos 点击最新版本后&#xff0c;将链接中 http://az764295.vo.msecnd.net 替换为 http://vscode.cdn.azure.cn 最后下载地址是&#xff1a; https://vscode.cdn.azur…

页面性能优化,如何减少回流

在开发时&#xff0c;不可避免的会遇到性能优化的问题&#xff0c;怎么做性能才会更好。 说到页面性能优化&#xff0c;我们就谈谈两个概念重绘和回流。 1、什么是重绘&#xff0c;什么是回流&#xff1f; 重绘: 当渲染树中的一些元素需要更新属性&#xff0c;而这些属性只是影…

综述|工业金属平面材料表面缺陷自动视觉检测的研究进展

点击上方“计算机视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 摘要&#xff1a; 基于计算机视觉的金属材料表面缺陷检测是冶金工业领域的研究热点。在金属制造行业中&#xff0c;高标准的平面质量要求自动视觉检查系统及其算法的性能必须不断提高。本文基于对钢&…

干货收藏 | 如何优化前端性能?

简介&#xff1a;随着前端的范畴逐渐扩大&#xff0c;深度逐渐下沉&#xff0c;富前端必然带来的一个问题就是性能。特别是在大型复杂项目中&#xff0c;重前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至崩溃。本文基于Quick BI&#xff08;数据可视化分…

【数据处理】格式化数据

格式化数据 一、前言二、示例三、效果图四、拓展——时间戳格式化 一、前言 在日常开发过程中&#xff0c;我们会遇到这样的需求&#xff1a;后端返回的某些数据&#xff0c;是使用数字代码来区别不同的含义&#xff08;比如1代表是&#xff0c;0代表否&#xff09;&#xff0c…

基于轻量化重构网络的表面缺陷视觉检测

源自&#xff1a;自动化学报 作者&#xff1a;余文勇 张阳 姚海明 石绘 编辑&#xff1a;OpenCV与AI深度学习 摘 要 基于深度学习的方法在某些工业产品的表面缺陷识别和分类方面表现出优异的性能, 然而大多数工业产品缺陷样本稀缺, 而且特征差异大, 导致这类需要大量缺陷样…

工艺篇:表面粗糙度

表面粗糙度 1.粗糙度符号解释2.表面粗糙度参考举例3. 新旧国标和国外标准表面粗糙度&#xff08;光洁度&#xff09;代号及参数对照表 表面粗糙度(surface roughness)是指加工表面具有的较小间距和微小峰谷的不平度 。其两波峰或两波谷之间的距离&#xff08;波度&#xff09;很…