当前位置: 首页 > article >正文

python做题日记(11)

第二十五题

        第二十五题是k个一组翻转链表,意思是给定一个链表,将每k个结点化成一组,对它们进行翻转操作,在对每一组都进行翻转操作之后,将它们重新连接起来,返回这个新的链表。所以代码思路也很好想,首先需要对链表的结点数量进行检查,如果链表结点的数量不足k个即无法进行分组,也就直接返回原链表。如果检查之后可以进行分组,就对前k个结点使用头插法进行翻转操作,最后将翻转后的链表与原链表相连,重复以上操作就可以完成对k个一组链表的翻转。

class Solution:def reverseKGroup(self, head: ListNode, k: int) -> ListNode:dummy = ListNode(0)dummy.next = headpre = dummywhile True:tail = pre# 检查剩余节点是否够 k 个for i in range(k):tail = tail.nextif not tail:return dummy.nextnex = tail.next# 翻转 k 个节点prev, curr = tail.next, pre.nextfor i in range(k):tmp = curr.nextcurr.next = prevprev = currcurr = tmp# 连接翻转后的部分tmp = pre.nextpre.next = tailpre = tmp

在这里对头插法翻转链表的过程进行一些解释,一开始我在理解的时候产生了一些混乱。这里一共有两个指针,还有一个临时指针用于进行交换,整个翻转的过程用一个表格来进行展示应该会更加清晰。在最开始检查链表结点数量是否足够k个的时候,将tail指针已经向后移动了k步。

步骤currprevtmp操作结果链表(已翻转部分用粗体)
11421.next=41→4 2→3→4→5
22132.next=12→1→4 3→4→5
33243.next=23→2→1→4 4→5
  • prev 初始为 tail.next(即4),curr 初始为 pre.next(即1)
  • 每次把 curr 插到 prev 前面,prev向前推进,curr向后推进

这里的curr指的是当前需要操作的结点,prev指的是已经翻转好后链表的头结点,temp是用来暂存当前要操作结点的下一结点以防断链。每次把当前结点插到已经翻转后的结点的最前面就是头插法的思想。

第二十六题

        第二十六题是删除有序数组中的重复项,这题可以使用双指针即快慢指针,快指针用来遍历数组,当快指针的值与慢指针的值不相等时,移动慢指针,并将快指针的值赋予移动后慢指针所指位置。慢指针用来保存不重复的部分,最后需要返回不含重复项数组的长度,因此返回慢指针+1即为数组长度,故有如下代码:

class Solution:def removeDuplicates(self, nums: list[int]) -> int:if not nums:return 0slow = 0for fast in range(1, len(nums)):if nums[fast] != nums[slow]:slow += 1nums[slow] = nums[fast]return slow + 1

http://www.lryc.cn/news/2395722.html

相关文章:

  • 2025——》NumPy中的np.logspace使用/在什么场景下适合使用np.logspace?NumPy中的np.logspace用法详解
  • STM32F407VET6学习笔记8:UART5串口接收中断的Cubemx配置
  • UE5.5 pixelstreaming插件打包报错
  • Python Django完整教程与代码示例
  • Spring Boot,两种配置文件
  • OpenLayers 地图标注之图文标注
  • 设计模式——简单工厂模式(创建型)
  • qt ubuntu 20.04 交叉编译
  • java中cocurrent包常用的集合类操作
  • 晶振频率稳定性:5G 基站与航天设备的核心竞争力
  • 基于python脚本进行Maxwell自动化仿真
  • Blueprints - List View Widget
  • docker-compose搭建prometheus以及grafana
  • 进阶智能体实战八、需求分析助手(基于qwen多模态大模型对图文需求文档分析)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • Git -> Git Stash临时保存当前工程分支修改
  • 多线程和并发之线程
  • apptrace 的优势以及对 App 的价值
  • android studio debug调试出现 IOException异常
  • PySpark 中使用 SQL 语句和表进行计算
  • [Python] Python中的多重继承
  • 在 RedHat 系统(RHEL 7/8/9)中安装 ​​pythonnet​​ 和 ​​.NET Core​​ 的完整指南
  • vr中风--数据处理模型搭建与训练
  • Socket网络编程之UDP套件字
  • 前端学习(7)—— HTML + CSS实现博客系统页面
  • Bert和GPT区别
  • 聊一聊接口测试中缓存处理策略
  • RuoYi前后端分离框架实现前后端数据传输加密(二)之前端篇
  • 如何使用.Net Reactor 批量加密 DLL
  • 基于视觉的车道线检测完整代码:让驾驶更安全的开源解决方案
  • Intellij IDEA 查找接口实现类的快捷键