力扣hot100_链表(3)_python版本

力扣hot100_链表(3)_python版本

一、25. K 个一组翻转链表

1.1、206. 反转链表

在这里插入图片描述
  • py代码
classListNode:def__init__(self, val=0,next= node): self.val = val self.next=nextclassSolution:defreverseList(self, head): pre =None cur = head while cur:next= cur.next cur.next= pre pre = cur cur =nextreturn pre 

1.2、92. 反转链表 II

在这里插入图片描述
  • 思路:
    整体来看,1是反转前的第left个节点(p0.next),pre(4)是反转的后的头节点,cur是当前遍历到的节点下一个(5)。
classSolution:defreverseBetween(self, head, left, right): p0 = dummy = ListNode(next= head)# 这样一起实例化,p0和dummy永远都是指向同一位置for _ inrange(left-1): p0 = p0.next# 知道转换的前一个结点 pre =None cur = p0.next# 当前正在处理的节点for _ inrange(right-left+1) nxt = cur.next cur.nxt = pre pre = cur cur = nxt p0.next.next= cur p0.next= pre return dummy.next
在这里插入图片描述
  • 代码:
classSolution:defreverseKGroup(self, head, k): n =0 cur = head while cur: n +=1 cur = cur.next p0 = dummy = ListNode(next= head) pre =None cur = head # k个一组处理while n >= k: n -= k for _ inrange(k): nxt = cur.next cur.next= pre pre = cur cur = nxt nxt = p0.next nxt.next= cur p0.next= pre p0 = nxt 

二、148. 排序链表

2.1、876. 链表的中间结点

在这里插入图片描述
  • 代码:这道题典型的快慢指针
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defmiddleNode(self, head: Optional[ListNode])-> Optional[ListNode]: t1 = t2 = head while t2 and t2.next: t1 = t1.next t2 = t2.next.nextreturn t1 

2.2、21. 合并两个有序链表

在这里插入图片描述
  • 代码:
classSolution:defmergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode])-> Optional[ListNode]: dummy = ListNode() cur = dummy while list1 and list2:if list1.val <= list2.val: cur.next= list1 cur = cur.next list1 = list1.nextelse: cur.next= list2 cur = cur.next list2 = list2.nextif list1: cur.next= list1 else: cur.next= list2 return dummy.next
在这里插入图片描述
  • 思路1:归并排序
    找到链表的中间节点,断开为前后两端,分别排序前后两端,排序后,再合并两个有序链表。
  • 代码1:
classSolution:# 876. 链表的中间结点(快慢指针)defmiddleNode(self, head: Optional[ListNode])-> Optional[ListNode]: slow = fast = head while fast and fast.next: pre = slow # 记录 slow 的前一个节点 slow = slow.next fast = fast.next.next pre.next=None# 断开 slow 的前一个节点和 slow 的连接return slow # 21. 合并两个有序链表(双指针)defmergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode])-> Optional[ListNode]: cur = dummy = ListNode()# 用哨兵节点简化代码逻辑while list1 and list2:if list1.val < list2.val: cur.next= list1 # 把 list1 加到新链表中 list1 = list1.nextelse:# 注:相等的情况加哪个节点都是可以的 cur.next= list2 # 把 list2 加到新链表中 list2 = list2.next cur = cur.next cur.next= list1 if list1 else list2 # 拼接剩余链表return dummy.nextdefsortList(self, head: Optional[ListNode])-> Optional[ListNode]:# 如果链表为空或者只有一个节点,无需排序if head isNoneor head.nextisNone:return head # 找到中间节点 head2,并断开 head2 与其前一个节点的连接# 比如 head=[4,2,1,3],那么 middleNode 调用结束后 head=[4,2] head2=[1,3] head2 = self.middleNode(head)# 分治 head = self.sortList(head) head2 = self.sortList(head2)# 合并return self.mergeTwoLists(head, head2)

Read more

Accelerate 是由 Hugging Face 开发的一个轻量级 Python 库,旨在让 PyTorch 的分布式训练变得极其简单

Accelerate 是由 Hugging Face 开发的一个轻量级 Python 库,旨在让 PyTorch 的分布式训练变得极其简单

对比:手动 DDP (Trainer + 4bit 量化) import os import torch from transformers import ( AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForLanguageModeling ) from transformers import BitsAndBytesConfig from peft import LoraConfig, get_peft_model # ========================================== # 第一部分:手动环境初始化 (手动 DDP 的标志) # ========================================== # 1. 显式获取当前进程的排名 # 当你使用 torchrun --nproc_per_node=2 启动时, # 进程 0 的 LOCAL_RANK 为 0,

By Ne0inhk

Python从0到100完整学习指南(必看导航)

Python 从 0 到 100 完整学习路线(2025–2026 实用版) 这是一条目前在中文社区被验证最多次、性价比最高、就业/副业/考研/转行都适用的 Python 学习路径。 分为 8 个大阶段,每个阶段给出: * 核心目标 * 推荐学习时长(每天 2–4 小时估算) * 最值得学的资源(2025–2026 仍活跃且评价最高的) * 必须掌握的技能清单 * 阶段性小目标 / 实战项目建议 阶段划分总览表 阶段名称目标人群建议时长累计总时长核心关键词0准备期完全零基础3–7 天1 周环境、IDE、学习心态1Python 基础语法零基础 → 能写小工具3–6 周1–2 个月变量、循环、函数、类2Pythonic

By Ne0inhk
时序数据库连接管理的必备工具:纯手工打造 Python 版本 KWDB 数据库连接池

时序数据库连接管理的必备工具:纯手工打造 Python 版本 KWDB 数据库连接池

前言 我没看到有官方的文档,可能就是没有了,所以还不如自己写呢,我写一个python版本的。 文档在这里,你可以自己搜索一下,我是真没找到:https://www.kaiwudb.com/kaiwudb_docs/#/oss_dev/ 我这已经测试成功了。 KaiwuDB 纯手工打造数据库连接池架构方案 由于 KaiwuDB (KWDB) 目前未内置连接池组件,为了在生命科学大数据高频读写场景下降低连接握手开销(约 30-100ms/次),我们需要自主构建一个高性能的 Python 数据库连接池。 我用AI帮我绘制了一下流程图,看着还不错。 一、 架构设计逻辑流程图 有 无 是 否 是 否 自动维护逻辑 是 定时巡检 连接是否超时/失效? 心跳重连/移除销毁 应用请求连接 池中是否有空闲连接? 获取空闲连接

By Ne0inhk
Python高效数据采集实战:基于IPIDEA代理的全方位教程

Python高效数据采集实战:基于IPIDEA代理的全方位教程

在当今数据驱动的时代,网页数据采集是获取行业洞察、支撑业务决策的核心手段。但随着网站IP限制机制升级,IP固定、访问限制等问题频繁出现,导致采集任务中断、数据获取不完整。IPIDEA作为全球领先的企业级代理服务提供商,凭借99.9%可用率的纯净IP资源、亿级并发承载能力及多场景适配优势,成为解决采集难题的关键工具。本文将从环境搭建到实战案例,带您掌握Python+IPIDEA的高效数据采集方案。 一、IPIDEA代理:数据采集的“加速器”与“防护盾” 在开始Python实战前,先了解IPIDEA为何能成为企业级数据采集的首选代理服务——其核心优势完美匹配采集场景的核心需求: 核心优势对数据采集的价值全球1亿级+纯净住宅IP模拟真实用户访问,规避网站对“非住宅IP”的拦截,适用于电商、社媒等场景99.9%IP可用率减少因IP失效导致的采集中断,保障任务连续性,尤其适合大规模、长时间采集任务无限并发请求支持亿级并发承载,可同时发起多线程/多进程采集,大幅提升数据获取效率多类型代理全覆盖动态住宅(自动变更)、静态住宅(长效稳定)、数据中心(高速低延迟)等,适配不同场景安全合规认证

By Ne0inhk