[{"data":1,"prerenderedAt":2073},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-leetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":40,"cover":156,"date":156,"description":1093,"extension":2063,"mathjax":2064,"meta":2065,"navigation":2064,"path":806,"published":808,"readingMinutes":2068,"seo":2069,"stem":2070,"sticky":156,"swiper_index":156,"tags":2071,"updated":156,"words":807,"__hash__":2072},"posts\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练（Javascript、TypeScript）Vol-1.md","2025-12-25-力扣百题速练（Javascript\u002FTypeScript）Vol.1","39687",{"type":1088,"value":1089,"toc":2033},"minimark",[1090,1094,1097,1102,1114,1137,1140,1150,1154,1157,1163,1166,1211,1214,1220,1223,1229,1233,1240,1244,1255,1262,1265,1276,1281,1287,1289,1291,1295,1298,1303,1318,1331,1335,1346,1349,1352,1358,1361,1392,1400,1403,1410,1430,1433,1496,1502,1506,1509,1517,1523,1527,1530,1533,1536,1539,1556,1562,1566,1572,1574,1576,1580,1599,1602,1608,1611,1614,1617,1620,1623,1626,1629,1632,1638,1642,1656,1659,1662,1665,1668,1674,1680,1682,1684,1688,1695,1701,1742,1748,1751,1755,1780,1783,1789,1791,1793,1797,1814,1826,1836,1838,1841,1844,1847,1850,1858,1861,1867,1870,1877,1884,1891,1894,1899,1905,1909,1922,1928,1945,1948,1963,2022,2025],[1091,1092,1093],"p",{},"简单刷个力扣百题，完球了这玩意从大二下开坑以来就没刷完，现在后端转前端也要那前端那一套来过一趟，还有几天字节面试了都",[1095,1096],"hr",{},[1098,1099,1101],"h2",{"id":1100},"_1两数之和","1.两数之和",[1091,1103,1104,1105,1109,1110,1113],{},"给定一个整数数组 nums 和一个整数目标值 target\n在该数组中找出 ",[1106,1107,1108],"strong",{},"和为目标值 target"," 的那 ",[1106,1111,1112],{},"两个"," 整数，并返回它们的数组下标\n你可以假设每种输入只会对应一个答案，并且同一个元素不能重复使用",[1091,1115,1116,1119,1120,1124,1125,1128,1129,1132,1133,1136],{},[1106,1117,1118],{},"示例","：\n输入：nums = ",[1121,1122,1123],"span",{},"2,7,11,15",", target = 9\n输出：",[1121,1126,1127],{},"0,1"," 解释：因为 nums",[1121,1130,1131],{},"0"," + nums",[1121,1134,1135],{},"1"," = 2 + 7 = 9。",[1091,1138,1139],{},"直接用双重循环解，优化的话其实可以上哈希表",[1141,1142,1147],"pre",{"className":1143,"code":1145,"language":189,"meta":1146},[1144],"language-TypeScript","function twoSum(nums: number[], target: number): number[] {\n    for (let i = 0; i \u003C nums.length; i++) {\n        for (let j = i + 1; j \u003C nums.length; j++) {\n            if (nums[i] + nums[j] === target) {\n                return [i, j];\n            }\n        }\n    }\n    return [];\n}\n","",[1148,1149,1145],"code",{"__ignoreMap":1146},[1098,1151,1153],{"id":1152},"_2两数相加","2.两数相加",[1091,1155,1156],{},"给定两个非空单向链表，表示两个非负整数\n每个节点存储一位数字，数字以逆序存储（个位在头部），要求返回一个新链表表示它们的和（同样逆序存储）\n不允许修改原链表",[1091,1158,1159,1162],{},[1106,1160,1161],{},"示例：","\n输入：l1 = 2 → 4 → 3（表示 342），l2 = 5 → 6 → 4（表示 465）\n输出：7 → 0 → 8（表示 807）",[1091,1164,1165],{},"本质上是模拟竖式加法，从低位到高位逐位相加。由于链表逆序存储，正好从个位开始遍历",[1167,1168,1169,1188,1198],"ol",{},[1170,1171,1172,1175,1176],"li",{},[1106,1173,1174],{},"逐位相加并处理进位","：\n",[1177,1178,1179,1182,1185],"ul",{},[1170,1180,1181],{},"同时遍历两个链表的节点，取当前节点值相加，加上上一位的进位（初始进位为 0）。",[1170,1183,1184],{},"当前位结果 = (val1 + val2 + carry) % 10",[1170,1186,1187],{},"新进位 carry = Math.floor((val1 + val2 + carry) \u002F 10)",[1170,1189,1190,1175,1193],{},[1106,1191,1192],{},"使用哑节点（dummy head）简化代码",[1177,1194,1195],{},[1170,1196,1197],{},"创建一个哑节点，尾指针指向它，便于统一处理头部节点，避免单独处理第一个节点。",[1170,1199,1200,1175,1203],{},[1106,1201,1202],{},"处理链表长度不等和最终进位",[1177,1204,1205,1208],{},[1170,1206,1207],{},"当一个链表遍历完时，将另一个链表的剩余节点视为 val = 0 继续相加。",[1170,1209,1210],{},"遍历结束后，若仍有进位（carry = 1），需添加一个新节点值为 1。",[1091,1212,1213],{},"提供以下 ListNode 类型定义：",[1141,1215,1218],{"className":1216,"code":1217,"language":189,"meta":1146},[1144],"class ListNode {\n  val: number;\n  next: ListNode | null;\n  constructor(val?: number, next?: ListNode | null) {\n    this.val = val === undefined ? 0 : val;\n    this.next = next === undefined ? null : next;\n  }\n}\n",[1148,1219,1217],{"__ignoreMap":1146},[1091,1221,1222],{},"题解",[1141,1224,1227],{"className":1225,"code":1226,"language":189,"meta":1146},[1144],"function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {\n  const dummy: ListNode = new ListNode(0);\n  \u002F\u002F 哑节点，没有 dummy，直接从第一个节点开始构建，结果链表的头节点会在循环中不断变化\n  \u002F\u002F需要额外判断是否是第一个节点\n  let tail: ListNode = dummy;\n  \u002F\u002F始终指向结果链表的“当前最后一个节点”。\n  \u002F\u002F每次计算出一位新数字后，直接在 tail 后面添加新节点\n  let carry: number = 0;\n  \u002F\u002F 进位，当前这一位加完后，是否需要给下一位（更高位）额外加 1\n\n  while (l1 !== null || l2 !== null || carry !== 0) {\n    const val1: number = l1 ? l1.val : 0;\n    const val2: number = l2 ? l2.val : 0;\n\n    const sum: number = val1 + val2 + carry;\n    const digit: number = sum % 10;\n    carry = Math.floor(sum \u002F 10);\n\n    tail.next = new ListNode(digit);\n    tail = tail.next;\n\n    if (l1) l1 = l1.next;\n    if (l2) l2 = l2.next;\n  }\n\n  return dummy.next;\n}\n",[1148,1228,1226],{"__ignoreMap":1146},[1098,1230,1232],{"id":1231},"_3无重复字符的最长子串","3.无重复字符的最长子串",[1091,1234,1235,1236,1239],{},"要求给定一个字符串 s，找出其中不含有重复字符的最长",[1106,1237,1238],{},"子串","的长度\n（而非子序列）",[1091,1241,1242],{},[1106,1243,1161],{},[1177,1245,1246,1249,1252],{},[1170,1247,1248],{},"输入：\"abcabcbb\" → 输出：3（子串 \"abc\"）",[1170,1250,1251],{},"输入：\"bbbbb\" → 输出：1",[1170,1253,1254],{},"输入：\"pwwkew\" → 输出：3（子串 \"wke\"）",[1091,1256,1257],{},[1258,1259],"img",{"alt":1260,"src":1261},"Longest Substring Without Repeating Characters - GeeksforGeeks","https:\u002F\u002Fmedia.geeksforgeeks.org\u002Fwp-content\u002Fuploads\u002F20240827143904\u002FLongest-Substring-without-repeating-characters-using-Sliding-window-1.webp",[1091,1263,1264],{},"直接上滑动窗口，结合哈希集合（Set）或映射",[1177,1266,1267,1270,1273],{},[1170,1268,1269],{},"使用左指针 left 和右指针 right 维护一个窗口 (left, right)",[1170,1271,1272],{},"扩展右指针，若遇到重复字符，则收缩左指针直到无重复",[1170,1274,1275],{},"每次更新最大长度 maxLength = Math.max(maxLength, right - left)",[1091,1277,1278],{},[1258,1279],{"alt":1146,"src":1280},"https:\u002F\u002Ffavtutor.com\u002Fresources\u002Fimages\u002Fuploads\u002Fmceu_28165975511699020966300.png",[1141,1282,1285],{"className":1283,"code":1284,"language":189,"meta":1146},[1144],"function lengthOfLongestSubstring(s: string): number {\n    const charSet = new Set\u003Cstring>();  \u002F\u002F 记录窗口内字符\n    let left = 0;                       \u002F\u002F 左指针\n    let maxLength = 0;                  \u002F\u002F 最大长度\n\n    for (let right = 0; right \u003C s.length; right++) {\n        \u002F\u002F 若当前字符已存在，收缩左指针\n        while (charSet.has(s[right])) {\n            charSet.delete(s[left]);\n            left++;\n        }\n        charSet.add(s[right]);\n        maxLength = Math.max(maxLength, right - left + 1);\n    }\n\n    return maxLength;\n}\n",[1148,1286,1284],{"__ignoreMap":1146},[1095,1288],{},[1095,1290],{},[1098,1292,1294],{"id":1293},"_4寻找两个正序数组的中位数","4.寻找两个正序数组的中位数",[1091,1296,1297],{},"要求在两个已排序数组 nums1 和 nums2 中找到合并后的中位数，且时间复杂度必须为 O(log(m + n))，其中 m 和 n 分别为数组长度",[1091,1299,1300,1302],{},[1106,1301,1118],{},"：",[1091,1304,1305,1306,1309,1310,1313,1314,1317],{},"输入：nums1 = ",[1121,1307,1308],{},"1,3",", nums2 = ",[1121,1311,1312],{},"2","\n输出：2.00000\n解释：合并数组 = ",[1121,1315,1316],{},"1,2,3"," ，中位数 2",[1091,1319,1305,1320,1309,1323,1326,1327,1330],{},[1121,1321,1322],{},"1,2",[1121,1324,1325],{},"3,4","\n输出：2.50000\n解释：合并数组 = ",[1121,1328,1329],{},"1,2,3,4"," ，中位数 (2 + 3) \u002F 2 = 2.5",[1332,1333,1334],"h3",{"id":1334},"最初思路",[1091,1336,1337,1338,1341,1342,1345],{},"最开始打算做双指针合并，使用两个指针 i 和 j 分别指向 nums1 和 nums2 的当前待比较位置（初始为 0），每次比较 nums1",[1121,1339,1340],{},"i"," 和 nums2",[1121,1343,1344],{},"j","，将较小的元素放入结果数组 merged，并将对应指针后移，当某个数组遍历完后，将另一个数组剩余元素全部追加到 merged，合并完成后，merged 就是一个完整有序数组",[1091,1347,1348],{},"然后就可以根据总长度奇偶性计算中位数：\n奇数直接取第 (total+1)\u002F2 个元素（索引 mid）\n偶数取第 total\u002F2 和第 total\u002F2 + 1 个元素的平均（索引 mid-1 和 mid）",[1091,1350,1351],{},"想了 40 分钟，但是复杂度 m * n，直接寄了",[1141,1353,1356],{"className":1354,"code":1355,"language":189,"meta":1146},[1144],"function findMedianSortedArrays(nums1: number[], nums2: number[]): number {\n    const merged: number[] = [];\n\n    for (let i = 0; i \u003C nums1.length; i++) {\n        for (let j = 0; j \u003C nums2.length; j++) {\n        while(nums2[j] \u003C= nums1[i]);\n            merged.push(nums2[j]);\n        }\n        merged.push(nums1[i]);\n    }\n\n    for (let k = 0; k \u003C nums2.length; k++) {\n        merged.push(nums2[k]);\n    }\n\n    const total = merged.length;\n    const mid = Math.floor(total \u002F 2);\n    return total % 2 === 1 ? merged[mid] : (merged[mid - 1] + merged[mid]) \u002F 2;\n}\n",[1148,1357,1355],{"__ignoreMap":1146},[1332,1359,1360],{"id":1360},"改进",[1177,1362,1363,1372,1384,1389],{},[1170,1364,1365,1368,1369,1371],{},[1106,1366,1367],{},"外层 for","：遍历 nums1 的每一个元素 nums1",[1121,1370,1340],{},"。",[1170,1373,1374,1377,1378,1380,1381,1383],{},[1106,1375,1376],{},"内层 while","（代替 for，避免重复遍历）：在放入 nums1",[1121,1379,1340],{}," 之前，先检查 nums2 的头部元素（nums2",[1121,1382,1131],{},"）。",[1170,1385,1386,1387,1371],{},"放入当前 nums1",[1121,1388,1340],{},[1170,1390,1391],{},"外层循环结束后，如果 nums2 还有剩余元素（说明它们都大于 nums1 所有元素），直接全部追加。",[1141,1393,1398],{"className":1394,"code":1396,"language":1397,"meta":1146},[1395],"language-ts","function findMedianSortedArrays(nums1: number[], nums2: number[]): number {\n  const merged: number[] = []\n\n  \u002F\u002F 外层循环遍历 nums1 的每个元素\n  for (let i = 0; i \u003C nums1.length; i++) {\n    \u002F\u002F 在放入 nums1[i] 之前，先把 nums2 中所有小于等于 nums1[i] 的元素放入\n    while (nums2.length > 0 && nums2[0] \u003C= nums1[i]) {\n      merged.push(nums2.shift()!) \u002F\u002F 取出 nums2 头部元素\n    }\n    \u002F\u002F 放入当前 nums1[i]\n    merged.push(nums1[i])\n  }\n  \u002F\u002F 处理 nums2 中剩余的所有元素（如果 nums2 还有）\n  while (nums2.length > 0) {\n    merged.push(nums2.shift()!)\n  }\n\n  const total = merged.length\n  const mid = Math.floor(total \u002F 2)\n\n  if (total % 2 === 1) {\n    return merged[mid]\n  } else {\n    return (merged[mid - 1] + merged[mid]) \u002F 2\n  }\n}\n","ts",[1148,1399,1396],{"__ignoreMap":1146},[1332,1401,1402],{"id":1402},"二分法",[1091,1404,1405,1406,1409],{},"暴力合并为 O(m + n)，但题目要求对数复杂度，因此需避免完整合并。核心思路是将问题转化为",[1106,1407,1408],{},"在较短数组上二分查找一个分区点","，使左右部分满足中位数条件：",[1177,1411,1412,1415,1418,1421,1424,1427],{},[1170,1413,1414],{},"总元素数 total = m + n。",[1170,1416,1417],{},"中位数位置：若 total 奇数，为第 (total + 1)\u002F2 个元素；若偶数，为第 total\u002F2 和第 total\u002F2 + 1 个元素的平均。",[1170,1419,1420],{},"我们需要在合并数组的“左侧”选取 total\u002F2 个元素（使用 (total + 1)\u002F2 以统一奇偶处理）。",[1170,1422,1423],{},"在较短数组 A 上二分查找左侧元素个数 i（0 ≤ i ≤ m），则较长数组 B 左侧元素个数 j = (total + 1)\u002F2 - i。",[1170,1425,1426],{},"分区条件：",[1170,1428,1429],{},"处理边界：使用 -∞ 和 +∞ 填充空侧。",[1332,1431,1432],{"id":1432},"算法步骤",[1167,1434,1435,1438,1441,1444,1472],{},[1170,1436,1437],{},"确保 nums1 为较短数组（若不是，交换）。",[1170,1439,1440],{},"二分范围：low = 0, high = nums1.length。",[1170,1442,1443],{},"计算分区：i = (low + high) \u002F 2, j = (m + n + 1) \u002F 2 - i。",[1170,1445,1446,1447],{},"检查分区：\n",[1177,1448,1449,1459,1469],{},[1170,1450,1451,1452,1455,1456,1458],{},"若 A",[1121,1453,1454],{},"i-1"," > B",[1121,1457,1344],{},"，则 i 太大，high = i - 1。",[1170,1460,1461,1462,1465,1466,1468],{},"若 B",[1121,1463,1464],{},"j-1"," > A",[1121,1467,1340],{},"，则 i 太小，low = i + 1。",[1170,1470,1471],{},"否则，分区正确。",[1170,1473,1474,1475],{},"计算中位数：\n",[1177,1476,1477,1486,1493],{},[1170,1478,1479,1480,1482,1483,1485],{},"左侧最大：max(A",[1121,1481,1454],{},", B",[1121,1484,1464],{},")。",[1170,1487,1488,1489,1482,1491,1485],{},"右侧最小：min(A",[1121,1490,1340],{},[1121,1492,1344],{},[1170,1494,1495],{},"若 total 奇数，返回左侧最大；偶数，返回平均。",[1141,1497,1500],{"className":1498,"code":1499,"language":189,"meta":1146},[1144],"function findMedianSortedArrays(nums1: number[], nums2: number[]): number {\n    const merged: number[] = [];\n\n    \u002F\u002F 外层循环遍历 nums1 的每个元素\n    for (let i = 0; i \u003C nums1.length; i++) {\n        \u002F\u002F 在放入 nums1[i] 之前，先把 nums2 中所有小于等于 nums1[i] 的元素放入 merged\n        while (nums2.length > 0 && nums2[0] \u003C= nums1[i]) {\n            merged.push(nums2.shift()!);  \u002F\u002F 取出 nums2 头部元素\n        }\n\n        \u002F\u002F 放入当前 nums1[i]\n        merged.push(nums1[i]);\n    }\n\n    \u002F\u002F 处理 nums2 中剩余的所有元素（如果 nums2 还有）\n    while (nums2.length > 0) {\n        merged.push(nums2.shift()!);\n    }\n\n    const total = merged.length;\n    const mid = Math.floor(total \u002F 2);\n\n    if (total % 2 === 1) {\n        return merged[mid];\n    } else {\n        return (merged[mid - 1] + merged[mid]) \u002F 2;\n    }\n}\n",[1148,1501,1499],{"__ignoreMap":1146},[1098,1503,1505],{"id":1504},"_5最长的回文子串","5.最长的回文子串",[1091,1507,1508],{},"要求给定一个字符串 s，返回其中最长的回文子串（回文指正读反读相同的连续子串）\n示例：",[1177,1510,1511,1514],{},[1170,1512,1513],{},"输入：\"babad\" → 输出：\"bab\" 或 \"aba\"（长度 3）",[1170,1515,1516],{},"输入：\"cbbd\" → 输出：\"bb\"（长度 2）",[1091,1518,1519],{},[1258,1520],{"alt":1521,"src":1522},"Leetcode 5. Longest Palindromic Substring | Nick Li","https:\u002F\u002Fnicklee1006.github.io\u002FLeetcode-5-Longest-Palindromic-Substring\u002F1.png",[1332,1524,1526],{"id":1525},"中心扩展法expand-around-center","中心扩展法（Expand Around Center）",[1091,1528,1529],{},"时间复杂度 O(n²)，空间复杂度 O(1)",[1332,1531,1532],{"id":1532},"思路",[1091,1534,1535],{},"回文串以中心对称。中心可能为单个字符（奇数长度回文）或两个相同字符间（偶数长度回文）。 对于字符串每个可能中心（共 2n-1 个），向两侧扩展比较字符，直至不对称。记录扩展中最长回文。",[1091,1537,1538],{},"步骤：",[1167,1540,1541,1544,1547,1550,1553],{},[1170,1542,1543],{},"遍历字符串索引 i 从 0 到 n-1。",[1170,1545,1546],{},"以 i 为中心扩展奇数长度回文。",[1170,1548,1549],{},"以 i 和 i+1 为中心扩展偶数长度回文。",[1170,1551,1552],{},"每次扩展更新最长回文起点和长度。",[1170,1554,1555],{},"返回对应子串。",[1091,1557,1558],{},[1258,1559],{"alt":1560,"src":1561},"Longest Palindromic Substring (With Visualization)","https:\u002F\u002Fcdn.prod.website-files.com\u002F6828da5fc9f6eba971cc609f\u002F6870e9a611fec83938e98155_Longest%20Palindromic%20Substring.jpg",[1332,1563,1565],{"id":1564},"typescript-实现","TypeScript 实现",[1141,1567,1570],{"className":1568,"code":1569,"language":189,"meta":1146},[1144],"function longestPalindrome(s: string): string {\n    if (s.length \u003C 2) return s;\n\n    let start = 0;      \u002F\u002F 最长回文起点\n    let maxLength = 1;  \u002F\u002F 最长回文长度（初始至少 1）\n\n    function expandAroundCenter(left: number, right: number) {\n        while (left >= 0 && right \u003C s.length && s[left] === s[right]) {\n            const currentLength = right - left + 1;\n            if (currentLength > maxLength) {\n                start = left;\n                maxLength = currentLength;\n            }\n            left--;\n            right++;\n        }\n    }\n\n    for (let i = 0; i \u003C s.length; i++) {\n        \u002F\u002F 奇数长度回文（中心为 i）\n        expandAroundCenter(i, i);\n        \u002F\u002F 偶数长度回文（中心为 i 和 i+1）\n        expandAroundCenter(i, i + 1);\n    }\n\n    return s.substring(start, start + maxLength);\n}\n",[1148,1571,1569],{"__ignoreMap":1146},[1095,1573],{},[1095,1575],{},[1098,1577,1579],{"id":1578},"_6-z-字变换","6. Z 字变换",[1091,1581,1582,1583,1586,1587,1590,1591,1594,1595,1598],{},"将一个给定字符串  ",[1148,1584,1585],{},"s","  根据给定的行数  ",[1148,1588,1589],{},"numRows"," ，以从上往下、从左到右进行 Z 字形排列\n比如输入字符串为  ",[1148,1592,1593],{},"\"PAYPALISHIRING\"","  行数为  ",[1148,1596,1597],{},"3","  时，排列如下：",[1091,1600,1601],{},"P A H N\nA P L S I I G\nY I R",[1091,1603,1604,1605],{},"之后输出需要从左往右逐行读取，产生出一个新的字符串，比如：",[1148,1606,1607],{},"\"PAHNAPLSIIGYIR\"",[1091,1609,1610],{},"实现这个将字符串进行指定行数变换的函数：",[1091,1612,1613],{},"string convert(string s, int numRows);",[1091,1615,1616],{},"示例 1：",[1091,1618,1619],{},"输入：s = \"PAYPALISHIRING\", numRows = 3\n输出：\"PAHNAPLSIIGYIR\"",[1091,1621,1622],{},"示例 2：",[1091,1624,1625],{},"输入：s = \"PAYPALISHIRING\", numRows = 4\n输出：\"PINALSIGYAHRPI\"\n解释：\nP I N\nA L S I G\nY A H R\nP I",[1332,1627,1565],{"id":1628},"typescript-实现-1",[1091,1630,1631],{},"直接计算位置",[1141,1633,1636],{"className":1634,"code":1635,"language":1397,"meta":1146},[1395],"function convert(s: string, numRows: number): string {\n  if (numRows === 1) return s\n\n  let result = ''\n  const cycle = 2 * numRows - 2\n\n  for (let row = 0; row \u003C numRows; row++) {\n    for (let i = 0; i + row \u003C s.length; i += cycle) {\n      result += s[i + row]\n      if (row !== 0 && row !== numRows - 1 && i + cycle - row \u003C s.length) {\n        result += s[i + cycle - row]\n      }\n    }\n  }\n\n  return result\n}\n",[1148,1637,1635],{"__ignoreMap":1146},[1098,1639,1641],{"id":1640},"_7-整数反转","7. 整数反转",[1091,1643,1644,1645,1648,1649,1651,1652,1655],{},"给你一个 32 位的有符号整数  ",[1148,1646,1647],{},"x"," ，返回将  ",[1148,1650,1647],{},"  中的数字部分反转后的结果\n如果反转后整数超过 32 位的有符号整数的范围  ",[1148,1653,1654],{},"[−231, 231 − 1]"," ，就返回 0\n假设环境不允许存储 64 位整数（有符号或无符号",[1091,1657,1658],{},"示例 1：\n输入：x = 123\n输出：321",[1091,1660,1661],{},"示例 2：\n输入：x = -123\n输出：-321",[1091,1663,1664],{},"没啥好讲的，转字符串反转再转回去，处理一下负号和边界情况就成",[1091,1666,1667],{},"反转字符串",[1141,1669,1672],{"className":1670,"code":1671,"language":1397,"meta":1146},[1395],"const reverseString = (str: string): string => str.split('').reverse().join('')\n",[1148,1673,1671],{"__ignoreMap":1146},[1141,1675,1678],{"className":1676,"code":1677,"language":1397,"meta":1146},[1395],"function reverse(x: number): number {\n  if (x === 0) {\n    return x\n  }\n  const MAX = 2 ** 31 - 1\n  const MIN = -(2 ** 31)\n\n  let mid = x.toString()\n  let LI: boolean = true\n  if (mid[0] === '-') {\n    LI = false\n  }\n  const reverseString = mid.split('').reverse().join('')\n  if (LI === true) {\n    if (parseInt(reverseString) \u003C MIN || parseInt(reverseString) > MAX) {\n      return 0\n    }\n    return parseInt(reverseString)\n  }\n  if (LI === false) {\n    let fin = reverseString.slice(0, reverseString.length - 1)\n    let fin2 = -parseInt(fin)\n    if (fin2 \u003C MIN || fin2 > MAX) {\n      return 0\n    }\n    return fin2\n  }\n}\n",[1148,1679,1677],{"__ignoreMap":1146},[1095,1681],{},[1095,1683],{},[1098,1685,1687],{"id":1686},"_8字符串转换整数","8.字符串转换整数",[1091,1689,1690,1691,1694],{},"实现一个  ",[1148,1692,1693],{},"myAtoi(string s)","  函数，使其能将字符串转换成一个 32 位有符号整数。",[1091,1696,1697,1698,1700],{},"函数  ",[1148,1699,1693],{},"  的算法如下：",[1167,1702,1703,1710,1721,1724],{},[1170,1704,1705,1706,1709],{},"空格：读入字符串并丢弃无用的前导空格（",[1148,1707,1708],{},"\" \"","）",[1170,1711,1712,1713,1716,1717,1720],{},"符号：检查下一个字符（假设还未到字符末尾）为  ",[1148,1714,1715],{},"'-'","  还是  ",[1148,1718,1719],{},"'+'","如果两者都不存在，则假定结果为正",[1170,1722,1723],{},"转换：通过跳过前置零来读取该整数，直到遇到非数字字符或到达字符串的结尾，如果没有读取数字，则结果为 0",[1170,1725,1726,1727,1729,1730,1733,1734,1736,1737,1733,1740],{},"舍入：如果整数数超过 32 位有符号整数范围  ",[1148,1728,1654],{}," ，需要截断这个整数，使其保持在这个范围内。具体来说，小于  ",[1148,1731,1732],{},"−231","  的整数应该被舍入为  ",[1148,1735,1732],{}," ，大于  ",[1148,1738,1739],{},"231 − 1",[1148,1741,1739],{},[1141,1743,1746],{"className":1744,"code":1745,"language":1397,"meta":1146},[1395],"function myAtoi(s: string): number {\n  let max = 2 ** 31 - 1\n  let min = -(2 ** 31)\n\n  let i: number = 0\n  let sign: number = 1\n  let fin = ''\n  let clac = 0\n\n  if (i \u003C= s.length) {\n    while (s[i] === ' ') {\n      i++\n    }\n\n    while (s[i] === '-' || s[i] === '+') {\n      if (s[i] === '-') {\n        sign = -1\n      }\n      if (s[i] === '+') {\n        sign = 1\n      }\n      if (clac === 1) {\n        return 0\n      }\n      clac = 1\n      i++\n    }\n    while (s[i] \u003C= '9' && s[i] >= '0') {\n      fin = fin + s[i]\n      i++\n    }\n    if (fin === '') return 0\n    if (sign === 1) {\n      if (parseInt(fin) >= max) {\n        return max\n      }\n      if (parseInt(fin) \u003C= min) {\n        return min\n      }\n      return parseInt(fin)\n    }\n    if (sign === -1) {\n      if (-parseInt(fin) >= max) {\n        return max\n      }\n      if (-parseInt(fin) \u003C= min) {\n        return min\n      }\n      return -fin\n    }\n  }\n}\n",[1148,1747,1745],{"__ignoreMap":1146},[1091,1749,1750],{},"没啥好说的，处理一下转换和条件判断的事情",[1098,1752,1754],{"id":1753},"_9回文数","9.回文数",[1091,1756,1757,1758,1760,1761,1763,1764,1767,1768,1771,1772,1775,1776,1779],{},"给一个整数  ",[1148,1759,1647],{}," ，如果  ",[1148,1762,1647],{},"  是一个回文整数，返回  ",[1148,1765,1766],{},"true"," ；否则，返回  ",[1148,1769,1770],{},"false","\n回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数\n例如，",[1148,1773,1774],{},"121","  是回文，而  ",[1148,1777,1778],{},"123","  不是",[1091,1781,1782],{},"智斗程度堪比两数之和，转字符串逆序比较秒了",[1141,1784,1787],{"className":1785,"code":1786,"language":1397,"meta":1146},[1395],"function isPalindrome(x: number): boolean {\n  let arr = x.toString()\n  let brr = arr.split('').reverse().join('')\n  if (arr === brr) {\n    return true\n  }\n  if (arr !== brr) {\n    return false\n  }\n}\n",[1148,1788,1786],{"__ignoreMap":1146},[1095,1790],{},[1095,1792],{},[1098,1794,1796],{"id":1795},"_10正则表达式匹配","10.正则表达式匹配",[1091,1798,1799,1800,1802,1803,1805,1806,1809,1810,1813],{},"给你一个字符串  ",[1148,1801,1585],{},"  和一个字符规律  ",[1148,1804,1091],{},"，请你来实现一个支持  ",[1148,1807,1808],{},"'.'","  和  ",[1148,1811,1812],{},"'*'","  的正则表达式匹配。",[1177,1815,1816,1821],{},[1170,1817,1818,1820],{},[1148,1819,1808],{},"  匹配任意单个字符",[1170,1822,1823,1825],{},[1148,1824,1812],{},"  匹配零个或多个前面的那一个元素",[1091,1827,1828,1829,1832,1833,1835],{},"匹配是要涵盖  ",[1106,1830,1831],{},"整个","  字符串  ",[1148,1834,1585],{},"  的，而不是部分字符串。",[1091,1837,1616],{},[1091,1839,1840],{},"输入：s = \"aa\", p = \"a\"\n输出：false\n解释：\"a\" 无法匹配 \"aa\" 整个字符串。",[1091,1842,1843],{},"示例 2:",[1091,1845,1846],{},"输入：s = \"aa\", p = \"a*\"\n输出：true\n解释：因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此，字符串 \"aa\" 可被视为 'a' 重复了一次。",[1091,1848,1849],{},"示例 3：",[1091,1851,1852,1853,1857],{},"输入：s = \"ab\", p = \".",[1854,1855,1856],"em",{},"\"\n输出：true\n解释：\".","\" 表示可匹配零个或多个（'*'）任意字符（'.'）",[1091,1859,1860],{},"这道题最开始是想要用纯同步双指针来解，没解出来",[1141,1862,1865],{"className":1863,"code":1864,"language":1397,"meta":1146},[1395],"function isMatch(s: string, p: string): boolean {\n  if (s == p) {\n    return true\n  }\n  let sindex = 0\n  let pindex = 0\n\n  while (sindex \u003C s.length && pindex \u003C p.length) {\n    if (s[sindex] === p[pindex] || p[pindex] === '.') {\n      sindex++\n      pindex++\n    }\n    if (p[pindex] === '*') {\n      while (s[sindex] === s[sindex + 1]) {\n        sindex++\n      }\n      pindex++\n    }\n    if (s[sindex] !== p[pindex]) {\n      if (p[pindex] !== '*' && p[pindex] !== '.') {\n        return false\n      }\n    }\n    return true\n  }\n}\n",[1148,1866,1864],{"__ignoreMap":1146},[1091,1868,1869],{},"↑ 错误答案",[1091,1871,1872,1873,1876],{},"主要是该问题具有",[1106,1874,1875],{},"非确定性","：同一个 \"x*\" 可以有多种匹配方式（0 次、1 次、多次），需要尝试不同分支。纯同步双指针（单路径贪婪）无法处理回溯需求，会在某些案例中错误消耗字符，导致后续失败。",[1091,1878,1879,1880,1883],{},"比如说在 s = \"aaa\", p = \"ab",[1854,1881,1882],{},"a\" 里贪婪匹配可能错误使用 \"b","\"，而实际应跳过 \"b*\"（匹配 0 次）",[1091,1885,1886,1887,1890],{},"因此",[1106,1888,1889],{},"不能用简单 while 循环同步双指针线性解决","，必须引入分支或状态记录",[1091,1892,1893],{},"然后题解就是使用 dp 解决：",[1091,1895,1896],{},[1148,1897,1898],{},"定义二维布尔数组 dp[i][j] 表示：s 的前 i 个字符（s[0..i-1]）是否能被 p 的前 j 个字符（p[0..j-1]）匹配，最终答案为 dp[m][n]，其中 m = s.length，n = p.length ",[1141,1900,1903],{"className":1901,"code":1902,"language":1397,"meta":1146},[1395],"function isMatch(s: string, p: string): boolean {\n  const m = s.length,\n    n = p.length\n  const dp = Array(m + 1)\n    .fill(null)\n    .map(() => Array(n + 1).fill(false))\n\n  dp[0][0] = true\n  for (let j = 2; j \u003C= n; j++) {\n    if (p[j - 1] === '*') {\n      dp[0][j] = dp[0][j - 2]\n    }\n  }\n\n  for (let i = 1; i \u003C= m; i++) {\n    for (let j = 1; j \u003C= n; j++) {\n      if (p[j - 1] === '*') {\n        dp[i][j] = dp[i][j - 2] || ((s[i - 1] === p[j - 2] || p[j - 2] === '.') && dp[i - 1][j])\n      } else {\n        dp[i][j] = (s[i - 1] === p[j - 1] || p[j - 1] === '.') && dp[i - 1][j - 1]\n      }\n    }\n  }\n\n  return dp[m][n]\n}\n",[1148,1904,1902],{"__ignoreMap":1146},[1332,1906,1908],{"id":1907},"初始化","初始化:",[1091,1910,1911,1914,1917,1918,1921],{},[1106,1912,1913],{},"空串与空模式",[1148,1915,1916],{},"dp[0][0] = true","：空字符串可以被空模式匹配。\n",[1106,1919,1920],{},"空字符串与非空模式"," 只有当模式中某些 “x*” 可以匹配 0 次字符时，才可能匹配空字符串。 因此从左向右扫描模式：",[1141,1923,1926],{"className":1924,"code":1925,"language":189,"meta":1146},[1144],"for (let j = 2; j \u003C= n; j++) {\n    if (p[j-1] === '*') {\n        dp[0][j] = dp[0][j-2];  \u002F\u002F 直接继承“跳过当前 x*”的状态\n    }\n}\n",[1148,1927,1925],{"__ignoreMap":1146},[1091,1929,1930,1931,1934,1935,1937,1938,1937,1941,1944],{},"示例：p = \"a",[1854,1932,1933],{},"b","c*\" 可以匹配空字符串，故 dp[0]",[1121,1936,1312],{},"、dp[0]",[1121,1939,1940],{},"4",[1121,1942,1943],{},"6"," 均为 true。",[1332,1946,1947],{"id":1947},"状态转移方程",[1091,1949,1950,1951,1954,1955,1958,1959,1962],{},"遍历 ",[1148,1952,1953],{},"i = 1..m"," 和 ",[1148,1956,1957],{},"j = 1..n","，根据 ",[1148,1960,1961],{},"p[j-1]"," 的类型分为两种情况：",[1167,1964,1965,1981],{},[1170,1966,1967,1970,1971,1977,1980],{},[1106,1968,1969],{},"当前模式字符不是 '*'","（普通字符或 '.'） 只能进行单字符匹配：",[1141,1972,1975],{"className":1973,"code":1974,"language":189,"meta":1146},[1144],"dp[i][j] = (s[i-1] === p[j-1] || p[j-1] === '.') && dp[i-1][j-1];\n",[1148,1976,1974],{"__ignoreMap":1146},[1978,1979],"br",{},"含义：当前字符匹配且前一个子问题也匹配，则当前子问题成立。",[1170,1982,1983,1986,1987,2013,2015,2016],{},[1106,1984,1985],{},"当前模式字符是 '*'","（与前一个字符组成 “x*”） '*' 提供了两种选择：",[1177,1988,1989,1995],{},[1170,1990,1991,1992,1371],{},"匹配 0 次：直接跳过整个 “x*”，状态等同于 dp[i]",[1121,1993,1994],{},"j-2",[1170,1996,1997,1998,2001,2002,2005,2006,2009,2010],{},"匹配 1 次或多次：前提是当前 ",[1148,1999,2000],{},"s[i-1]"," 能与 “x” 匹配（",[1148,2003,2004],{},"s[i-1] === p[j-2]"," 或 ",[1148,2007,2008],{},"p[j-2] === '.'","），且在上一个字符已匹配的基础上继续使用 “x*” 匹配当前字符，即 ",[1148,2011,2012],{},"dp[i-1][j]",[1978,2014],{},"两者任一成立即可：",[1141,2017,2020],{"className":2018,"code":2019,"language":189,"meta":1146},[1144],"dp[i][j] = dp[i][j-2] ||\n          ((s[i-1] === p[j-2] || p[j-2] === '.') && dp[i-1][j]);\n",[1148,2021,2019],{"__ignoreMap":1146},[1332,2023,2024],{"id":2024},"时间与空间复杂度",[1177,2026,2027,2030],{},[1170,2028,2029],{},"时间复杂度：O(mn)，每个状态只计算一次。",[1170,2031,2032],{},"空间复杂度：O(mn)，可进一步优化为 O(n)（仅使用两行或一行滚动数组）。",{"title":1146,"searchDepth":2034,"depth":2034,"links":2035},4,[2036,2038,2039,2040,2047,2052,2055,2056,2057,2058],{"id":1100,"depth":2037,"text":1101},2,{"id":1152,"depth":2037,"text":1153},{"id":1231,"depth":2037,"text":1232},{"id":1293,"depth":2037,"text":1294,"children":2041},[2042,2044,2045,2046],{"id":1334,"depth":2043,"text":1334},3,{"id":1360,"depth":2043,"text":1360},{"id":1402,"depth":2043,"text":1402},{"id":1432,"depth":2043,"text":1432},{"id":1504,"depth":2037,"text":1505,"children":2048},[2049,2050,2051],{"id":1525,"depth":2043,"text":1526},{"id":1532,"depth":2043,"text":1532},{"id":1564,"depth":2043,"text":1565},{"id":1578,"depth":2037,"text":1579,"children":2053},[2054],{"id":1628,"depth":2043,"text":1565},{"id":1640,"depth":2037,"text":1641},{"id":1686,"depth":2037,"text":1687},{"id":1753,"depth":2037,"text":1754},{"id":1795,"depth":2037,"text":1796,"children":2059},[2060,2061,2062],{"id":1907,"depth":2043,"text":1908},{"id":1947,"depth":2043,"text":1947},{"id":2024,"depth":2043,"text":2024},"md",true,{"uuid":2066,"slots":2067},"8bf8c9a0-e156-11f0-8c74-e5dcd76d125c",{},10,{"title":1085,"description":1093},"posts\u002Fleetcode\u002F2025-12-25-力扣百题速练（Javascript、TypeScript）Vol-1",[199,40,161,310],"iiWBRJoIoRNglfcroQm9Y2__wrkEUmyKJNPxaTlx_FE",1790443287424]