☰
leetCode100算法开源笔记分享
2026/10/4 2:43:50 网站建设 项目流程

磁盘
内存
数据页:InnoDB 从磁盘拉取数据到内存 的最小单位 默认 16KB
一行数据

数据页包含多行数据,存在磁盘中,如果要修改一个数据,需要从磁盘把数据拉到内存里

假设你要把id=5的用户余额从 1000 改成 900。
第一步:把那一页从磁盘拉到内存

磁盘 内存
┌──────────┐ ┌──────────────┐
│ 页3 │ ──读入──→ │ Buffer Pool │
│ (含id=5)│ │ ┌────────┐ │
└──────────┘ │ │ 页3 │ │
│ └────────┘ │
└──────────────┘

第二步:在内存里改

直接把内存中页3里的id=5那行改成 900。

第三步:写 redo log

在 redo log 里记一笔:

“页3的偏移量100处,值从1000改成了900”->有页号+偏移量直接定位

第四步:页3变成"脏页"

意思是"内存里改了,但磁盘上还是旧的"。后台线程会找机会把它刷回磁盘。

系统崩溃时,可以直接从redo log里恢复,保证数据始终是900,实现持久性

为什么把数据页拉从磁盘拉到内存来,还拉一大把数据?
因为磁盘读需要进行寻址,时间是ms级,而cpu是nm级,拉到内存来读速度快的多

leetcode100

最大子数组和
在一个整数数组中,找到一个数字连续子数组,和要最大
思路:利用动态规划,dp[i]定义为以nun[i]结尾的最大连续子数组和,确保连续性,不能定义为前i个数中最大子数组和,保证不了连续性
dp[i]=max(dp[i-1]+num[i],num[i]);
如果前面的贡献是负,那就直接抛弃,从num[i]重新开始,
如果前面贡献是正,就加上

反转链表
给定一个链表头节点,将链表反转

思路:脑子里面一定要有这张图,先画出来

  1. 维护两个指针:prev(前一个节点,初始为null)和curr(当前节点,初始为head)。
  2. 遍历链表,每次把curr.next指向prev,实现反转。
  3. 然后prev和curr同时后移一步,继续处理下一个节点。
  4. 当curr为null时,prev就是新的头节点。
    ![[屏幕截图 2026-10-03 172545 3.png]]

一个前驱指针prev,和一个curr指针
反转时curr.next=prev,直到curr=null
先初始化ListNode prev=null; ListNode curr=head;
while(curr!=null){
ListNode temp=curr.next;
curr.next=prev;
prev=curr;
curr=temp;
}
return prev;

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询