[{"data":1,"prerenderedAt":2600},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-leetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2":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":2590,"mathjax":2591,"meta":2592,"navigation":2591,"path":810,"published":812,"readingMinutes":2595,"seo":2596,"stem":2597,"sticky":156,"swiper_index":156,"tags":2598,"updated":156,"words":811,"__hash__":2599},"posts\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练（Javascript、TypeScript）Vol-2.md","2025-12-26-力扣百题速练（Javascript、TypeScript）Vol.2","39620",{"type":1088,"value":1089,"toc":2562},"minimark",[1090,1094,1099,1104,1135,1146,1149,1159,1162,1168,1171,1174,1177,1179,1183,1186,1262,1265,1346,1349,1354,1357,1363,1368,1371,1376,1379,1384,1388,1391,1396,1399,1404,1408,1411,1418,1488,1494,1501,1508,1512,1531,1541,1580,1593,1626,1629,1634,1644,1649,1657,1662,1670,1675,1687,1692,1703,1706,1714,1720,1722,1724,1728,1731,1737,1741,1748,1752,1758,1761,1767,1774,1785,1801,1804,1816,1827,1831,1837,1841,1872,1900,1910,1920,1923,1929,1932,1935,1939,1942,1957,1961,1984,2012,2016,2019,2027,2049,2066,2073,2112,2121,2128,2144,2153,2176,2182,2186,2204,2215,2218,2224,2226,2228,2232,2243,2246,2251,2257,2263,2266,2269,2280,2286,2289,2293,2313,2340,2352,2363,2368,2371,2377,2379,2381,2385,2391,2401,2408,2411,2417,2420,2434,2440,2444,2470,2473,2484,2490,2495,2501,2507,2513,2516,2532,2535,2556],[1091,1092,1093],"p",{},"这里是力扣速刷第二期awa\n说是速刷其实卡了挺久",[1095,1096],"img",{"src":1097,"style":1098},"https:\u002F\u002Fpicx.zhimg.com\u002Fv2-1e47d2da440013ae7d4262f54c26dd52_720w.webp?source=d16d100b","height=100px",[1100,1101,1103],"h2",{"id":1102},"_11-盛最多水的容器","11. 盛最多水的容器",[1091,1105,1106,1107,1111,1112,1115,1116,1118,1119,1122,1123,1126,1127,1130,1131,1134],{},"给定一个长度为  ",[1108,1109,1110],"code",{},"n","  的整数数组  ",[1108,1113,1114],{},"height"," 。有  ",[1108,1117,1110],{},"  条垂线，第  ",[1108,1120,1121],{},"i","  条线的两个端点是  ",[1108,1124,1125],{},"(i, 0)","  和  ",[1108,1128,1129],{},"(i, height[i])"," \n找出其中的两条线，使得它们与  ",[1108,1132,1133],{},"x","  轴共同构成的容器可以容纳最多的水\n返回容器可以储存的最大水量",[1091,1136,1137,1138,1142,1143,1145],{},"输入：",[1139,1140,1141],"span",{},"1,8,6,2,5,4,8,3,7"," \n输出：49 \n解释：图中垂直线代表输入数组 ",[1139,1144,1141],{},"。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49",[1091,1147,1148],{},"最开始直接暴力解",[1150,1151,1157],"pre",{"className":1152,"code":1154,"language":1155,"meta":1156},[1153],"language-ts","function maxArea(height: number[]): number {\n  let res = 0\n  let i = 0\n  let j = 1\n\n  for (i = 0; i \u003C height.length - 1; i++) {\n    for (j = 1; j \u003C height.length; j++) {\n      let xin = (j - i) * Math.min(height[i], height[j])\n      if (xin > res) {\n        res = xin\n      }\n    }\n  }\n  return res\n}\n","ts","",[1108,1158,1154],{"__ignoreMap":1156},[1091,1160,1161],{},"后面想了一下，做了些改进",[1150,1163,1166],{"className":1164,"code":1165,"language":1155,"meta":1156},[1153],"function maxArea(height: number[]): number {\n  let res = 0\n  let i = 0\n  let j = height.length - 1\n\n  while (i \u003C j) {\n    let fin = Math.min(height[i], height[j]) * (j - i)\n    if (fin > res) {\n      res = fin\n    }\n    if (height[i] \u003C height[j]) {\n      i++\n    } else {\n      j--\n    }\n  }\n  return res\n}\n",[1108,1167,1165],{"__ignoreMap":1156},[1091,1169,1170],{},"初始时宽度最大，若当前面积不是最大，则必须通过增加高度来补偿宽度损失\n移动较短指针是因为：保持较短边不动，宽度只会变小，面积不可能增大；只有移动较短边才可能遇到更高的高度，从而提升面积",[1091,1172,1173],{},"经典双指针加贪心的题",[1175,1176],"hr",{},[1175,1178],{},[1100,1180,1182],{"id":1181},"_12整数转罗马数字","12.整数转罗马数字",[1091,1184,1185],{},"七个不同的符号代表罗马数字，其值如下：",[1187,1188,1189,1202],"table",{},[1190,1191,1192],"thead",{},[1193,1194,1195,1199],"tr",{},[1196,1197,1198],"th",{},"符号",[1196,1200,1201],{},"值",[1203,1204,1205,1214,1222,1230,1238,1246,1254],"tbody",{},[1193,1206,1207,1211],{},[1208,1209,1210],"td",{},"I",[1208,1212,1213],{},"1",[1193,1215,1216,1219],{},[1208,1217,1218],{},"V",[1208,1220,1221],{},"5",[1193,1223,1224,1227],{},[1208,1225,1226],{},"X",[1208,1228,1229],{},"10",[1193,1231,1232,1235],{},[1208,1233,1234],{},"L",[1208,1236,1237],{},"50",[1193,1239,1240,1243],{},[1208,1241,1242],{},"C",[1208,1244,1245],{},"100",[1193,1247,1248,1251],{},[1208,1249,1250],{},"D",[1208,1252,1253],{},"500",[1193,1255,1256,1259],{},[1208,1257,1258],{},"M",[1208,1260,1261],{},"1000",[1091,1263,1264],{},"罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则：",[1266,1267,1268,1272,1321],"ul",{},[1269,1270,1271],"li",{},"如果该值不是以 4 或 9 开头，请选择可以从输入中减去的最大值的符号，将该符号附加到结果，减去其值，然后将其余部分转换为罗马数字。",[1269,1273,1274,1275,1279,1280,1282,1283,1285,1286,1289,1290,1282,1292,1294,1295,1298,1299,1301,1302,1304,1305,1308,1309,1312,1313,1316,1317,1320],{},"如果该值以 4 或 9 开头，使用  ",[1276,1277,1278],"strong",{},"减法形式","，表示从以下符号中减去一个符号，例如 4 是 5 (",[1108,1281,1218],{},") 减 1 (",[1108,1284,1210],{},"): ",[1108,1287,1288],{},"IV"," ，9 是 10 (",[1108,1291,1226],{},[1108,1293,1210],{},")：",[1108,1296,1297],{},"IX","。仅使用以下减法形式：4 (",[1108,1300,1288],{},")，9 (",[1108,1303,1297],{},")，40 (",[1108,1306,1307],{},"XL",")，90 (",[1108,1310,1311],{},"XC",")，400 (",[1108,1314,1315],{},"CD",") 和 900 (",[1108,1318,1319],{},"CM",")。",[1269,1322,1323,1324,1326,1327,1326,1329,1326,1331,1333,1334,1336,1337,1339,1340,1342,1343,1345],{},"只有 10 的次方（",[1108,1325,1210],{},", ",[1108,1328,1226],{},[1108,1330,1242],{},[1108,1332,1258],{},"）最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (",[1108,1335,1218],{},")，50 (",[1108,1338,1234],{},") 或 500 (",[1108,1341,1250],{},")。如果需要将符号附加 4 次，请使用  ",[1276,1344,1278],{},"。",[1091,1347,1348],{},"给定一个整数，将其转换为罗马数字。",[1091,1350,1351],{},[1276,1352,1353],{},"示例 1：",[1091,1355,1356],{},"**输入：num = 3749",[1091,1358,1359,1362],{},[1276,1360,1361],{},"输出："," \"MMMDCCXLIX\"",[1091,1364,1365],{},[1276,1366,1367],{},"解释：",[1091,1369,1370],{},"3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)\n700 = DCC 由于 500 (D) + 100 (C) + 100 (C)\n40 = XL 由于 50 (L) 减 10 (X)\n9 = IX 由于 10 (X) 减 1 (I)\n注意：49 不是 50 (L) 减 1 (I) 因为转换是基于小数位",[1091,1372,1373],{},[1276,1374,1375],{},"示例 2：",[1091,1377,1378],{},"**输入：num = 58",[1091,1380,1381,1383],{},[1276,1382,1361],{},"\"LVIII\"",[1091,1385,1386],{},[1276,1387,1367],{},[1091,1389,1390],{},"50 = L\n8 = VIII",[1091,1392,1393],{},[1276,1394,1395],{},"示例 3：",[1091,1397,1398],{},"**输入：num = 1994",[1091,1400,1401,1403],{},[1276,1402,1361],{},"\"MCMXCIV\"",[1091,1405,1406],{},[1276,1407,1367],{},[1091,1409,1410],{},"1000 = M\n900 = CM\n90 = XC\n4 = IV",[1091,1412,1413,1414,1417],{},"最初想法是尝试通过",[1276,1415,1416],{},"逐位处理数字","的方式将整数转换为罗马数字：",[1419,1420,1421,1427,1455,1477,1483],"ol",{},[1269,1422,1423,1426],{},[1276,1424,1425],{},"将数字转换为字符串并反转","： 使用 reverseString(num.toString()) 将数字从高位到低位变为低位到高位（例如 1994 → \"4991\"）,从个位开始依次处理每个数位（个位、十位、百位、千位）",[1269,1428,1429,1432,1433],{},[1276,1430,1431],{},"为每个数位定义对应的罗马符号","：\n",[1266,1434,1435,1440,1445,1450],{},[1269,1436,1437],{},[1108,1438,1439],{},"个位（i===0）：1→\"I\", 5→\"V\", 10→\"X\"",[1269,1441,1442],{},[1108,1443,1444],{},"十位（i===1）：1→\"X\", 5→\"L\", 10→\"C\"",[1269,1446,1447],{},[1108,1448,1449],{},"百位（i===2）：1→\"C\", 5→\"D\", 10→\"M\"",[1269,1451,1452],{},[1108,1453,1454],{},"千位（i===3）：直接用 \"M\" 重复",[1269,1456,1457,1432,1460],{},[1276,1458,1459],{},"根据当前位上的数字（0-9）生成对应罗马表示",[1266,1461,1462,1465,1468,1471,1474],{},[1269,1463,1464],{},"1-3：重复添加 \"1\" 的符号（curr1）",[1269,1466,1467],{},"4：curr1 + curr2（如 \"IV\"）",[1269,1469,1470],{},"5：curr2（如 \"V\"）",[1269,1472,1473],{},"6-8：curr2 + 重复 (digit-5) 次 curr1",[1269,1475,1476],{},"9：curr1 + curr3（如 \"IX\"）",[1269,1478,1479,1482],{},[1276,1480,1481],{},"使用数组 + unshift 收集符号","： 因为已反转数字，低位先处理，使用 unshift（从数组头部插入）试图让高位符号最终出现在前面",[1269,1484,1485],{},[1276,1486,1487],{},"最后 join 成字符串返回",[1150,1489,1492],{"className":1490,"code":1491,"language":1155,"meta":1156},[1153],"function intToRoman(num: number): string {\n  let curr1 = ''\n  let curr2 = ''\n  let curr3 = ''\n  const reverseString = (str: string): string => str.split('').reverse().join('')\n\n  let top = reverseString(num.toString())\n  let l = top.length\n\n  let finalstr: string[] = []\n  let i = 0\n\n  function nums(pos: number) {\n    const di = Number(top[pos])\n    if (di === 0) return\n\n    if (di \u003C= 3) {\n      for (let j = 0; j \u003C di; j++) {\n        finalstr.unshift(curr1)\n      }\n    } else if (di === 4) {\n      finalstr.unshift(curr1 + curr2)\n    } else if (di === 5) {\n      finalstr.unshift(curr2)\n    } else if (di \u003C= 8) {\n      for (let j = 0; j \u003C di - 5; j++) {\n        finalstr.unshift(curr1)\n      }\n      finalstr.unshift(curr2)\n    } else if (di === 9) {\n      finalstr.unshift(curr1 + curr3)\n    }\n  }\n  while (i \u003C l) {\n    if (i === 0) {\n      curr1 = 'I'\n      curr2 = 'V'\n      curr3 = 'X'\n      nums(i)\n      i++\n    }\n\n    if (i === 1) {\n      curr1 = 'X'\n      curr2 = 'L'\n      curr3 = 'C'\n      nums(i)\n      i++\n    }\n\n    if (i === 2) {\n      curr1 = 'C'\n      curr2 = 'D'\n      curr3 = 'M'\n      nums(i)\n      i++\n    }\n\n    if (i === 3) {\n      const vas = Number(top[i])\n      for (let j = 0; j \u003C vas; j++) {\n        finalstr.unshift('M')\n      }\n      i++\n    }\n  }\n  return finalstr.join('')\n}\n",[1108,1493,1491],{"__ignoreMap":1156},[1091,1495,1496,1497,1500],{},"题目标准解法是",[1276,1498,1499],{},"贪心算法 + 值-符号映射表","，从高位到低位匹配最大可能值，这个写法确实没有想出来：",[1150,1502,1506],{"className":1503,"code":1505,"language":189,"meta":1156},[1504],"language-TypeScript","function intToRoman(num: number): string {\n    const valueSymbols: [number, string][] = [\n        [1000, \"M\"], [900, \"CM\"], [500, \"D\"], [400, \"CD\"],\n        [100,  \"C\"], [90,  \"XC\"], [50,  \"L\"], [40,  \"XL\"],\n        [10,   \"X\"], [9,   \"IX\"], [5,   \"V\"], [4,   \"IV\"],\n        [1,    \"I\"]\n    ];\n\n    let result = '';\n    for (const [value, symbol] of valueSymbols) {\n        while (num >= value) {\n            result += symbol;\n            num -= value;\n        }\n    }\n    return result;\n}\n",[1108,1507,1505],{"__ignoreMap":1156},[1100,1509,1511],{"id":1510},"_13-罗马数字转整数","13. 罗马数字转整数",[1091,1513,1514,1515,1517,1518,1517,1520,1517,1522,1524,1525,1524,1527,1126,1529,1345],{},"罗马数字包含以下七种字符: ",[1108,1516,1210],{},"， ",[1108,1519,1218],{},[1108,1521,1226],{},[1108,1523,1234],{},"，",[1108,1526,1242],{},[1108,1528,1250],{},[1108,1530,1258],{},[1091,1532,1533,1536,1537,1540],{},[1276,1534,1535],{},"字符"," ",[1276,1538,1539],{},"数值","\nI 1\nV 5\nX 10\nL 50\nC 100\nD 500\nM 1000",[1091,1542,1543,1544,1547,1548,1551,1552,1547,1555,1558,1559,1561,1562,1564,1565,1547,1568,1571,1572,1561,1575,1561,1577,1579],{},"例如， 罗马数字  ",[1108,1545,1546],{},"2","  写做  ",[1108,1549,1550],{},"II"," ，即为两个并列的 1 。",[1108,1553,1554],{},"12",[1108,1556,1557],{},"XII"," ，即为  ",[1108,1560,1226],{}," + ",[1108,1563,1550],{}," 。 ",[1108,1566,1567],{},"27",[1108,1569,1570],{},"XXVII",", 即为  ",[1108,1573,1574],{},"XX",[1108,1576,1218],{},[1108,1578,1550],{}," 。",[1091,1581,1582,1583,1586,1587,1589,1590,1592],{},"通常情况下，罗马数字中小的数字在大的数字的右边。但也存在特例，例如 4 不写做  ",[1108,1584,1585],{},"IIII","，而是  ",[1108,1588,1288],{},"。数字 1 在数字 5 的左边，所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地，数字 9 表示为  ",[1108,1591,1297],{},"。这个特殊的规则只适用于以下六种情况：",[1266,1594,1595,1606,1616],{},[1269,1596,1597,1599,1600,1602,1603,1605],{},[1108,1598,1210],{},"  可以放在  ",[1108,1601,1218],{}," (5) 和  ",[1108,1604,1226],{}," (10) 的左边，来表示 4 和 9。",[1269,1607,1608,1599,1610,1612,1613,1615],{},[1108,1609,1226],{},[1108,1611,1234],{}," (50) 和  ",[1108,1614,1242],{}," (100) 的左边，来表示 40 和 90。",[1269,1617,1618,1599,1620,1622,1623,1625],{},[1108,1619,1242],{},[1108,1621,1250],{}," (500) 和  ",[1108,1624,1258],{}," (1000) 的左边，来表示 400 和 900。",[1091,1627,1628],{},"给定一个罗马数字，将其转换成整数。",[1091,1630,1631],{},[1276,1632,1633],{},"示例 1:",[1091,1635,1636,1639,1640,1643],{},[1276,1637,1638],{},"输入:"," s = \"III\"\n",[1276,1641,1642],{},"输出:"," 3",[1091,1645,1646],{},[1276,1647,1648],{},"示例 2:",[1091,1650,1651,1653,1654,1656],{},[1276,1652,1638],{}," s = \"IV\"\n",[1276,1655,1642],{}," 4",[1091,1658,1659],{},[1276,1660,1661],{},"示例 3:",[1091,1663,1664,1666,1667,1669],{},[1276,1665,1638],{}," s = \"IX\"\n",[1276,1668,1642],{}," 9",[1091,1671,1672],{},[1276,1673,1674],{},"示例 4:",[1091,1676,1677,1679,1680,1682,1683,1686],{},[1276,1678,1638],{}," s = \"LVIII\"\n",[1276,1681,1642],{}," 58\n",[1276,1684,1685],{},"解释:"," L = 50, V= 5, III = 3.",[1091,1688,1689],{},[1276,1690,1691],{},"示例 5:",[1091,1693,1694,1696,1697,1699,1700,1702],{},[1276,1695,1638],{}," s = \"MCMXCIV\"\n",[1276,1698,1642],{}," 1994\n",[1276,1701,1685],{}," M = 1000, CM = 900, XC = 90, IV = 4.",[1091,1704,1705],{},"直接从左到右遍历字符串，比较当前符号与下一个符号的值：",[1266,1707,1708,1711],{},[1269,1709,1710],{},"如果当前值 \u003C 下一个值，则减去当前值（形成减法组合）。",[1269,1712,1713],{},"否则加上当前值",[1150,1715,1718],{"className":1716,"code":1717,"language":1155,"meta":1156},[1153],"function romanToInt(s: string): number {\n  const map = {\n    I: 1,\n    V: 5,\n    X: 10,\n    L: 50,\n    C: 100,\n    D: 500,\n    M: 1000,\n  }\n\n  let res = 0\n\n  for (let i = 0; i \u003C s.length; i++) {\n    const current = map[s[i]]\n    const next = map[s[i + 1]]\n\n    if (next && current \u003C next) {\n      res += next - current\n      i++\n    } else {\n      res += current\n    }\n  }\n  return res\n}\n",[1108,1719,1717],{"__ignoreMap":1156},[1175,1721],{},[1175,1723],{},[1100,1725,1727],{"id":1726},"_14-最长公共前缀","14. 最长公共前缀",[1091,1729,1730],{},"编写一个函数来查找字符串数组中的最长公共前缀",[1091,1732,1733,1734],{},"如果不存在公共前缀，返回空字符串  ",[1108,1735,1736],{},"\"\"",[1091,1738,1739],{},[1276,1740,1353],{},[1091,1742,1743,1744,1747],{},"输入：strs = ",[1139,1745,1746],{},"\"flower\",\"flow\",\"flight\"","\n输出：\"fl\"",[1091,1749,1750],{},[1276,1751,1375],{},[1091,1753,1743,1754,1757],{},[1139,1755,1756],{},"\"dog\",\"racecar\",\"car\"","\n输出：\"\"\n解释：输入不存在公共前缀",[1091,1759,1760],{},"题解比较简单，如下",[1150,1762,1765],{"className":1763,"code":1764,"language":1155,"meta":1156},[1153],"function longestCommonPrefix(strs: string[]): string {\n  if (strs.length === 0) return ''\n\n  for (let i = 0; i \u003C strs[0].length; i++) {\n    const char = strs[0][i]\n    for (let j = 1; j \u003C strs.length; j++) {\n      if (i === strs[j].length || strs[j][i] !== char) {\n        return strs[0].substring(0, i)\n      }\n    }\n  }\n  return strs[0]\n}\n",[1108,1766,1764],{"__ignoreMap":1156},[1091,1768,1769,1770,1773],{},"主要就是注意一个写法，在 JavaScript（以及 TypeScript）中，",[1108,1771,1772],{},"strs[0][i]"," 是一种链式索引访问（chained indexing）的写法，用于访问二维结构或嵌套可索引对象中的元素",[1091,1775,1776,1777,1780,1781,1784],{},"假设 ",[1108,1778,1779],{},"strs = [\"flower\", \"flow\", \"flight\"]","，循环变量 ",[1108,1782,1783],{},"i = 2"," 时：",[1266,1786,1787,1792],{},[1269,1788,1789],{},[1108,1790,1791],{},"strs[0] → \"flower\"",[1269,1793,1794,1797,1798],{},[1108,1795,1796],{},"strs[0][2] → \"flower\""," 的第 2 个字符 → ",[1108,1799,1800],{},"'o'",[1091,1802,1803],{},"同理：",[1266,1805,1806,1811],{},[1269,1807,1808],{},[1108,1809,1810],{},"strs[1][2] → \"flow\"[2] → 'o'",[1269,1812,1813],{},[1108,1814,1815],{},"strs[2][2] → \"flight\"[2] → 'i'",[1091,1817,1818,1819,1822,1823,1826],{},"通过比较 ",[1108,1820,1821],{},"strs[0][i] ","与其他字符串的 ",[1108,1824,1825],{},"strs[j][i]"," 是否相等，来判断第 i 位置是否仍属于公共前缀",[1828,1829,1830],"h3",{"id":1830},"等价的写法",[1150,1832,1835],{"className":1833,"code":1834,"language":1155,"meta":1156},[1153],"const firstStr = strs[0]\nfirstStr[i]\n\n\u002F\u002F 使用 charAt 方法\nstrs[0].charAt(i)\n\n\u002F\u002F 使用 at 方法 ES2022+\nstrs[0].at(i)\n",[1108,1836,1834],{"__ignoreMap":1156},[1100,1838,1840],{"id":1839},"_15-三数之和","15. 三数之和",[1091,1842,1843,1844,1847,1848,1851,1852,1855,1856,1859,1860,1863,1864,1867,1868,1871],{},"一个整数数组  ",[1108,1845,1846],{},"nums"," ，判断是否存在三元组  ",[1108,1849,1850],{},"[nums[i], nums[j], nums[k]]","  满足  ",[1108,1853,1854],{},"i != j","、",[1108,1857,1858],{},"i != k","  且  ",[1108,1861,1862],{},"j != k"," ，同时还满足  ",[1108,1865,1866],{},"nums[i] + nums[j] + nums[k] == 0"," ，返回所有和为  ",[1108,1869,1870],{},"0","  且不重复的三元组，且答案中不可以包含重复的三元组",[1091,1873,1874,1875,1878,1879,1882,1883,1886,1889,1892,1893,1896,1897],{},"示例 1：\n输入：",[1108,1876,1877],{},"nums = [-1,0,1,2,-1,-4]","\n输出：",[1108,1880,1881],{},"[[-1,-1,2],[-1,0,1]]","\n解释：\n",[1108,1884,1885],{},"nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 ",[1108,1887,1888],{},"nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 ",[1108,1890,1891],{},"nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 ","\n不同的三元组是 ",[1108,1894,1895],{},"[-1,0,1] ","和 ",[1108,1898,1899],{},"[-1,-1,2] ",[1091,1901,1902,1903,1878,1906,1909],{},"示例 2：\n输入：",[1108,1904,1905],{},"nums = [0,1,1]",[1108,1907,1908],{},"[]","\n解释：唯一可能的三元组和不为 0",[1091,1911,1912,1913,1878,1916,1919],{},"示例 3：\n输入：",[1108,1914,1915],{},"nums = [0,0,0]",[1108,1917,1918],{},"[[0,0,0]]","\n解释：唯一可能的三元组和为 0",[1091,1921,1922],{},"最开始是想直接 n^3 暴力解，然后用 Set 去重",[1150,1924,1927],{"className":1925,"code":1926,"language":1155,"meta":1156},[1153],"function threeSum(nums: number[]): number[][] {\n  nums.sort((a, b) => a - b)\n  const result: number[][] = []\n  const seen = new Set\u003Cstring>()\n\n  for (let i = 0; i \u003C nums.length - 2; i++) {\n    for (let j = i + 1; j \u003C nums.length - 1; j++) {\n      for (let k = j + 1; k \u003C nums.length; k++) {\n        if (nums[i] + nums[j] + nums[k] === 0) {\n          const triplet = [nums[i], nums[j], nums[k]]\n          const key = triplet.join(',')\n          if (!seen.has(key)) {\n            seen.add(key)\n            result.push(triplet)\n          }\n        }\n      }\n    }\n  }\n\n  return result\n}\n",[1108,1928,1926],{"__ignoreMap":1156},[1091,1930,1931],{},"很明显，时间复杂度特别高，直接爆了",[1091,1933,1934],{},"解法的话依旧双指针降维",[1828,1936,1938],{"id":1937},"第一步排序","第一步：排序",[1091,1940,1941],{},"排序后可以：利用有序数组的特性，通过指针移动快速缩小范围",[1091,1943,1944,1945,1948,1949,1952,1953,1956],{},"比如原数组是 ",[1108,1946,1947],{},"[-1,0,1,2,-1,-4]","，排序后变成 ",[1108,1950,1951],{},"[-4,-1,-1,0,1,2]","。这时候，相同的元素（比如两个 ",[1108,1954,1955],{},"-1","）会挨在一起，方便后续去重（重复元素会相邻，容易跳过）",[1828,1958,1960],{"id":1959},"第二步固定一个数双指针找另外两个数","第二步：固定一个数，双指针找另外两个数",[1091,1962,1963,1964,1967,1968,1971,1972,1975,1976,1979,1980,1983],{},"排序后，我们固定第一个数 ",[1108,1965,1966],{},"nums[i]","，然后用左指针 ",[1108,1969,1970],{},"left"," 指向 ",[1108,1973,1974],{},"i+1","，右指针 ",[1108,1977,1978],{},"right"," 指向数组末尾。三个数的和 ",[1108,1981,1982],{},"sum = nums[i] + nums[left] + nums[right]","：",[1266,1985,1986,1997,2006],{},[1269,1987,1988,1989,1992,1993,1996],{},"如果 ",[1108,1990,1991],{},"sum \u003C 0","：说明需要更大的数，左指针右移（",[1108,1994,1995],{},"left++","）；",[1269,1998,1988,1999,2002,2003,1996],{},[1108,2000,2001],{},"sum > 0","：说明需要更小的数，右指针左移（",[1108,2004,2005],{},"right--",[1269,2007,1988,2008,2011],{},[1108,2009,2010],{},"sum = 0","：找到一个有效三元组，记录结果。",[1828,2013,2015],{"id":2014},"第三步去重","第三步：去重",[1091,2017,2018],{},"具体分三种情况：",[2020,2021,2023,2024,2026],"h4",{"id":2022},"_1-固定数-numsi-重复","1. 固定数 ",[1108,2025,1966],{}," 重复",[1091,2028,2029,2030,2032,2033,2036,2037,2040,2041,2036,2044,2046,2047,1345],{},"比如排序后的数组是 ",[1108,2031,1951],{},"，当 ",[1108,2034,2035],{},"i=1","（",[1108,2038,2039],{},"nums[i]=-1","）时，和 ",[1108,2042,2043],{},"i=2",[1108,2045,2039],{},"）时的情况是一样的。这时候需要跳过重复的 ",[1108,2048,1966],{},[1091,2050,2051,2054,2055,2058,2059,2062,2063,2065],{},[1276,2052,2053],{},"判断条件","：如果 ",[1108,2056,2057],{},"i > 0"," 且 ",[1108,2060,2061],{},"nums[i] === nums[i-1]","，说明当前 ",[1108,2064,1966],{}," 和前一个数重复，直接跳过。",[2020,2067,2069,2070,2026],{"id":2068},"_2-左指针-numsleft-重复","2. 左指针 ",[1108,2071,2072],{},"nums[left]",[1091,2074,2075,2076,2036,2079,2082,2083,2036,2086,2082,2089,2036,2092,2095,2096,2099,2100,2036,2103,2105,2106,2108,2109,2111],{},"假设已经找到 ",[1108,2077,2078],{},"i=0",[1108,2080,2081],{},"nums[i]=-4","），",[1108,2084,2085],{},"left=1",[1108,2087,2088],{},"nums[left]=-1",[1108,2090,2091],{},"right=5",[1108,2093,2094],{},"nums[right]=2","），此时和为 ",[1108,2097,2098],{},"-4 + (-1) + 2 = -3","，不满足条件。左指针右移到 ",[1108,2101,2102],{},"left=2",[1108,2104,2088],{},"），这时候 ",[1108,2107,2072],{}," 和前一个 ",[1108,2110,1970],{}," 位置的数重复，需要跳过。",[1091,2113,2114,2116,2117,2120],{},[1276,2115,2053],{},"：当找到和为 0 的三元组后，需要循环判断 ",[1108,2118,2119],{},"nums[left] === nums[left+1]","，如果是，左指针右移，直到遇到不同的数。",[2020,2122,2124,2125,2026],{"id":2123},"_3-右指针-numsright-重复","3. 右指针 ",[1108,2126,2127],{},"nums[right]",[1091,2129,2130,2131,2108,2133,2135,2136,2139,2140,2143],{},"同样，找到和为 0 的三元组后，如果 ",[1108,2132,2127],{},[1108,2134,1978],{}," 位置的数重复（比如 ",[1108,2137,2138],{},"nums[right]=1"," 和 ",[1108,2141,2142],{},"nums[right-1]=1","），需要跳过。",[1091,2145,2146,2148,2149,2152],{},[1276,2147,2053],{},"：循环判断 ",[1108,2150,2151],{},"nums[right] === nums[right-1]","，如果是，右指针左移，直到遇到不同的数。",[1419,2154,2155,2161,2170],{},[1269,2156,2157,2160],{},[1276,2158,2159],{},"先排序","：nums.sort((a, b) => a - b)，使得相同元素相邻，便于跳过重复。",[1269,2162,2163,2166,2167,2169],{},[1276,2164,2165],{},"外层循环跳过重复的 i","：如果当前 nums",[1139,2168,1121],{}," 与前一个相同，则跳过（避免同一值的 i 产生重复三元组）。",[1269,2171,2172,2175],{},[1276,2173,2174],{},"内层双指针移动时跳过重复的 left 和 right","：找到一个有效三元组后，跳过所有相同的 left 和 right 值。",[1150,2177,2180],{"className":2178,"code":2179,"language":1155,"meta":1156},[1153],"function threeSum(nums: number[]): number[][] {\n  nums.sort((a, b) => a - b) \u002F\u002F 先排序，关键一步\n  const result: number[][] = []\n\n  for (let i = 0; i \u003C nums.length - 2; i++) {\n    \u002F\u002F 跳过重复的 nums[i]\n    if (i > 0 && nums[i] === nums[i - 1]) {\n      continue\n    }\n\n    let left = i + 1\n    let right = nums.length - 1\n\n    while (left \u003C right) {\n      const sum = nums[i] + nums[left] + nums[right]\n\n      if (sum === 0) {\n        result.push([nums[i], nums[left], nums[right]]) \u002F\u002F加入结果\n\n        \u002F\u002F 跳过重复的 left\n        while (left \u003C right && nums[left] === nums[left + 1]) {\n          left++\n        }\n        \u002F\u002F 跳过重复的 right\n        while (left \u003C right && nums[right] === nums[right - 1]) {\n          right--\n        }\n\n        left++\n        right--\n      } else if (sum \u003C 0) {\n        left++\n      } else {\n        right--\n      }\n    }\n  }\n\n  return result\n}\n",[1108,2181,2179],{"__ignoreMap":1156},[1100,2183,2185],{"id":2184},"_16-最接近的三数之和","16. 最接近的三数之和",[1091,2187,2188,2189,1111,2191,2193,2194,2197,2198,2200,2201,2203],{},"给你一个长度为  ",[1108,2190,1110],{},[1108,2192,1846],{},"  和 一个目标值  ",[1108,2195,2196],{},"target","。请你从  ",[1108,2199,1846],{},"  中选出三个整数，使它们的和与  ",[1108,2202,2196],{},"  最接近，返回这三个数的和\n假定每组输入只存在恰好一个解",[1091,2205,2206,2207,2210,2211,2214],{},"示例：\n输入：nums = ",[1108,2208,2209],{},"[-1,2,1,-4]"," , ",[1108,2212,2213],{},"target = 1","\n输出：2\n解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2)",[1091,2216,2217],{},"解法和三数之和一样都是双指针解题\n多一些判断而已",[1150,2219,2222],{"className":2220,"code":2221,"language":1155,"meta":1156},[1153],"function threeSumClosest(nums: number[], target: number): number {\n  nums.sort((a, b) => a - b)\n  let closestSum = nums[0] + nums[1] + nums[2]\n  let minDiff = Math.abs(closestSum - target)\n\n  for (let i = 0; i \u003C nums.length - 2; i++) {\n    let left = i + 1\n    let right = nums.length - 1\n\n    while (left \u003C right) {\n      const sum = nums[i] + nums[left] + nums[right]\n      const diff = Math.abs(sum - target)\n\n      if (diff \u003C minDiff) {\n        minDiff = diff\n        closestSum = sum\n      }\n\n      if (sum \u003C target) {\n        left++\n      } else if (sum > target) {\n        right--\n      } else {\n        return sum\n      }\n    }\n  }\n  return closestSum\n}\n",[1108,2223,2221],{"__ignoreMap":1156},[1175,2225],{},[1175,2227],{},[1100,2229,2231],{"id":2230},"_17电话号码的的数字组合","17.电话号码的的数字组合",[1091,2233,2234,2235,2238,2239,2242],{},"给定一个仅包含数字  ",[1108,2236,2237],{},"2-9","  的字符串，返回所有它能表示的字母组合。答案可以按  ",[1276,2240,2241],{},"任意顺序","  返回。",[1091,2244,2245],{},"给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。",[1095,2247],{"src":2248,"alt":2249,"width":2250},"https:\u002F\u002Fpic.leetcode.cn\u002F1752723054-mfIHZs-image.png","电话按键",300,[1091,2252,2253,2254],{},"示例 1：\n输入：digits = \"23\"\n输出：",[1139,2255,2256],{},"\"ad\",\"ae\",\"af\",\"bd\",\"be\",\"bf\",\"cd\",\"ce\",\"cf\"",[1091,2258,2259,2260],{},"示例 2：\n输入：digits = \"2\"\n输出：",[1139,2261,2262],{},"\"a\",\"b\",\"c\"",[1091,2264,2265],{},"练度不够，还得继续练",[1091,2267,2268],{},"主要解法是迭代法：",[1266,2270,2271,2274,2277],{},[1269,2272,2273],{},"外层循环遍历 digits 中的每一个数字（从左到右）。",[1269,2275,2276],{},"对于当前数字 digit：",[1269,2278,2279],{},"一轮结束后，将 temp 赋值给 result，成为下一轮的“已有组合”。",[1150,2281,2284],{"className":2282,"code":2283,"language":1155,"meta":1156},[1153],"function letterCombinations(digits: string): string[] {\n  if (digits.length === 0) return []\n\n  const map: { [key: string]: string } = {\n    '2': 'abc',\n    '3': 'def',\n    '4': 'ghi',\n    '5': 'jkl',\n    '6': 'mno',\n    '7': 'pqrs',\n    '8': 'tuv',\n    '9': 'wxyz',\n  }\n\n  let result: string[] = ['']\n\n  for (const digit of digits) {\n    const letters = map[digit]\n    const temp: string[] = []\n\n    for (const prev of result) {\n      for (const letter of letters) {\n        temp.push(prev + letter)\n      }\n    }\n    result = temp\n  }\n\n  return result\n}\n",[1108,2285,2283],{"__ignoreMap":1156},[1091,2287,2288],{},"从“空组合”开始，依次将每个新数字的字母可能性“横向扩展”到所有已有组合上，最终得到所有完整组合",[1100,2290,2292],{"id":2291},"_18四数之和","18.四数之和",[1091,2294,2295,2296,2298,2299,2301,2302,2304,2305,2308,2309,2312],{},"给你一个由  ",[1108,2297,1110],{},"  个整数组成的数组  ",[1108,2300,1846],{}," ，和一个目标值  ",[1108,2303,2196],{}," 。请你找出并返回满足下述全部条件且",[1276,2306,2307],{},"不重复","的四元组  ",[1108,2310,2311],{},"[nums[a], nums[b], nums[c], nums[d]]"," （若两个四元组元素一一对应，则认为两个四元组重复）：",[1266,2314,2315,2320,2335],{},[1269,2316,2317],{},[1108,2318,2319],{},"0 \u003C= a, b, c, d \u003C n",[1269,2321,2322,1855,2325,1855,2328,1126,2331,2334],{},[1108,2323,2324],{},"a",[1108,2326,2327],{},"b",[1108,2329,2330],{},"c",[1108,2332,2333],{},"d","  互不相同",[1269,2336,2337],{},[1108,2338,2339],{},"nums[a] + nums[b] + nums[c] + nums[d] == target",[1091,2341,1137,2342,2345,2346,1878,2349],{},[1108,2343,2344],{},"nums = [1,0,-1,0,-2,2]",", ",[1108,2347,2348],{},"target = 0",[1108,2350,2351],{},"[[-2,-1,1,2] , [-2,0,0,2] , [-1,0,0,1]]",[1091,2353,1137,2354,2345,2357,1878,2360],{},[1108,2355,2356],{},"nums = [2,2,2,2,2]",[1108,2358,2359],{},"target = 8",[1108,2361,2362],{},"[[2,2,2,2]]",[1091,2364,2365],{},[1276,2366,2367],{},"就是三数之和的基础上再套上一层 for 循环",[1091,2369,2370],{},"题解",[1150,2372,2375],{"className":2373,"code":2374,"language":1155,"meta":1156},[1153],"\u002F**\n * @param {number[]} nums\n * @param {number} target\n * @return {number[][]}\n *\u002F\nfunction(nums, target) {\n    nums.sort((a, b) => a - b);  \u002F\u002F 先排序\n    const n = nums.length;\n    const result = [];\n\n    if (n \u003C 4) return result;\n\n    for (let i = 0; i \u003C n - 3; i++) {\n        \u002F\u002F 去重 i\n        if (i > 0 && nums[i] === nums[i - 1]) continue;\n\n        \u002F\u002F 剪枝：当前四个最小值之和已大于 target，直接终止\n        if (nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) break;\n\n        \u002F\u002F 剪枝：当前 i 与后面三个最大值之和小于 target，跳过本次 i\n        if (nums[i] + nums[n - 3] + nums[n - 2] + nums[n - 1] \u003C target) continue;\n\n        for (let j = i + 1; j \u003C n - 2; j++) {\n            \u002F\u002F 去重 j\n            if (j > i + 1 && nums[j] === nums[j - 1]) continue;\n\n            \u002F\u002F 剪枝\n            if (nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target) break;\n            if (nums[i] + nums[j] + nums[n - 2] + nums[n - 1] \u003C target) continue;\n\n            let left = j + 1;\n            let right = n - 1;\n\n            while (left \u003C right) {\n                const sum = nums[i] + nums[j] + nums[left] + nums[right];\n\n                if (sum === target) {\n                    result.push([nums[i], nums[j], nums[left], nums[right]]);\n\n                    \u002F\u002F 去重 left\n                    while (left \u003C right && nums[left] === nums[left + 1]) left++;\n                    \u002F\u002F 去重 right\n                    while (left \u003C right && nums[right] === nums[right - 1]) right--;\n\n                    left++;\n                    right--;\n                } else if (sum \u003C target) {\n                    left++;\n                } else {\n                    right--;\n                }\n            }\n        }\n    }\n\n    return result;\n};\n",[1108,2376,2374],{"__ignoreMap":1156},[1175,2378],{},[1175,2380],{},[1100,2382,2384],{"id":2383},"_19-删除链表的第-n-个节点","19. 删除链表的第 n 个节点",[1091,2386,2387,2388,2390],{},"给你一个链表，删除链表的倒数第  ",[1108,2389,1110],{},"  个结点，并且返回链表的头结点",[1091,2392,2393,2394,2397,2398],{},"输入：head = ",[1139,2395,2396],{},"1,2,3,4,5",", n = 2\n输出：",[1139,2399,2400],{},"1,2,3,5",[1091,2402,2393,2403,2405,2406],{},[1139,2404,1213],{},", n = 1\n输出：",[1139,2407],{},[1091,2409,2410],{},"自己写的一版，思路主要是遍历一趟链表搞到 length，再用 n 确定 index 来定位要删的位置，最后再删掉该节点",[1150,2412,2415],{"className":2413,"code":2414,"language":1155,"meta":1156},[1153],"function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {\n  let len = 0\n  let curr = head\n  while (curr !== null) {\n    len++\n    curr = curr.next\n  }\n\n  if (len === n) {\n    return head?.next ?? null\n  }\n\n  let index = len - n - 1\n  let delindex = 0\n\n  let del = head\n  let prev = new ListNode(0)\n  prev.next = head\n  while (del !== null) {\n    prev = prev.next\n    del = del.next\n    if (delindex === index) {\n      prev.next = del.next\n    }\n    delindex++\n  }\n  return head\n}\n",[1108,2416,2414],{"__ignoreMap":1156},[1091,2418,2419],{},"题解的话主要是用快慢指针,这个思路挺不错的其实",[1266,2421,2422,2425,2428,2431],{},[1269,2423,2424],{},"引入虚拟头结点 dummy",[1269,2426,2427],{},"让 fast 指针先走 n 步",[1269,2429,2430],{},"然后 slow 与 fast 同步移动，当 fast 到达末尾时，slow 指向的就是倒数第 n 个节点的前一个节点",[1269,2432,2433],{},"执行 slow.next = slow.next.next 删除目标节点",[1150,2435,2438],{"className":2436,"code":2437,"language":1155,"meta":1156},[1153],"function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {\n  \u002F\u002F 边界：空链表或 n 无效直接返回\n  if (head === null) return null\n\n  const dummy = new ListNode(0)\n  dummy.next = head\n\n  let fast: ListNode | null = dummy\n  let slow: ListNode | null = dummy\n\n  \u002F\u002F fast 先走 n 步\n  for (let i = 0; i \u003C n; i++) {\n    fast = fast!.next \u002F\u002F n 合法时不会为 null\n  }\n\n  \u002F\u002F fast 和 slow 同步移动，直到 fast 到达末尾\n  while (fast!.next !== null) {\n    fast = fast!.next\n    slow = slow!.next\n  }\n\n  \u002F\u002F 此时 slow 指向倒数第 n 个节点的前一个节点\n  if (slow!.next !== null) {\n    slow!.next = slow!.next.next\n  }\n\n  return dummy.next\n}\n",[1108,2439,2437],{"__ignoreMap":1156},[1100,2441,2443],{"id":2442},"_20有效的括号","20.有效的括号",[1091,2445,2446,2447,1524,2450,1524,2453,1524,2456,1524,2459,1524,2462,2465,2466,2469],{},"给定一个只包括  ",[1108,2448,2449],{},"'('",[1108,2451,2452],{},"')'",[1108,2454,2455],{},"'{'",[1108,2457,2458],{},"'}'",[1108,2460,2461],{},"'['",[1108,2463,2464],{},"']'","  的字符串  ",[1108,2467,2468],{},"s"," ，判断字符串是否有效",[1091,2471,2472],{},"有效字符串需满足：",[1419,2474,2475,2478,2481],{},[1269,2476,2477],{},"左括号必须用相同类型的右括号闭合。",[1269,2479,2480],{},"左括号必须以正确的顺序闭合。",[1269,2482,2483],{},"每个右括号都有一个对应的相同类型的左括号。",[1091,2485,1874,2486,2489],{},[1108,2487,2488],{},"s = \"()\"","\n输出：true",[1091,2491,1902,2492,2489],{},[1108,2493,2494],{},"s = \"()[]{}\"",[1091,2496,1912,2497,2500],{},[1108,2498,2499],{},"s = \"(]\"","\n输出：false",[1091,2502,2503,2504,2489],{},"示例 4：\n输入：",[1108,2505,2506],{},"s = \"([])\"",[1091,2508,2509,2510,2500],{},"示例 5：\n输入：",[1108,2511,2512],{},"s = \"([)]\"",[1091,2514,2515],{},"提示：",[1266,2517,2518,2523],{},[1269,2519,2520],{},[1108,2521,2522],{},"1 \u003C= s.length \u003C= 104",[1269,2524,2525,2527,2528,2531],{},[1108,2526,2468],{},"  仅由括号  ",[1108,2529,2530],{},"'()[]{}'","  组成",[1091,2533,2534],{},"思路不难，主要就是栈匹配问题",[1266,2536,2537,2543,2550,2553],{},[1269,2538,2539,2540],{},"开括号 → 入栈 ",[1108,2541,2542],{},"stk.push(s[i])",[1269,2544,2545,2546,2549],{},"闭括号 → 元素出栈 ",[1108,2547,2548],{},"stk.pop()"," 进行匹配",[1269,2551,2552],{},"若栈空或栈顶不匹配 → 立即返回 false；否则弹出栈顶",[1269,2554,2555],{},"遍历结束 → 栈空返回 true，否则 false",[1150,2557,2560],{"className":2558,"code":2559,"language":1155,"meta":1156},[1153],"function isValid(s: string): boolean {\n  let stk: string[] = []\n  for (let i = 0; i \u003C s.length; i++) {\n    if (s[i] === '(' || s[i] === '[' || s[i] === '{') {\n      stk.push(s[i])\n    } else if (s[i] === ')' || s[i] === ']' || s[i] === '}') {\n      if (stk.length === 0) {\n        return false\n      }\n      let curr = stk.pop()!\n      if (curr === '(' && s[i] === ')') {\n      } else if (curr === '[' && s[i] === ']') {\n      } else if (curr === '{' && s[i] === '}') {\n      } else {\n        return false\n      }\n    }\n  }\n  return stk.length === 0\n}\n",[1108,2561,2559],{"__ignoreMap":1156},{"title":1156,"searchDepth":2563,"depth":2563,"links":2564},4,[2565,2567,2568,2569,2573,2585,2586,2587,2588,2589],{"id":1102,"depth":2566,"text":1103},2,{"id":1181,"depth":2566,"text":1182},{"id":1510,"depth":2566,"text":1511},{"id":1726,"depth":2566,"text":1727,"children":2570},[2571],{"id":1830,"depth":2572,"text":1830},3,{"id":1839,"depth":2566,"text":1840,"children":2574},[2575,2576,2577],{"id":1937,"depth":2572,"text":1938},{"id":1959,"depth":2572,"text":1960},{"id":2014,"depth":2572,"text":2015,"children":2578},[2579,2581,2583],{"id":2022,"depth":2563,"text":2580},"1. 固定数 nums[i] 重复",{"id":2068,"depth":2563,"text":2582},"2. 左指针 nums[left] 重复",{"id":2123,"depth":2563,"text":2584},"3. 右指针 nums[right] 重复",{"id":2184,"depth":2566,"text":2185},{"id":2230,"depth":2566,"text":2231},{"id":2291,"depth":2566,"text":2292},{"id":2383,"depth":2566,"text":2384},{"id":2442,"depth":2566,"text":2443},"md",true,{"uuid":2593,"slots":2594},"fc8d2090-e24a-11f0-83d7-7339c4cb9ff5",{},11,{"title":1085,"description":1093},"posts\u002Fleetcode\u002F2025-12-26-力扣百题速练（Javascript、TypeScript）Vol-2",[199,40,161,313],"pRrPEj79Xv7Ynm3vJxzKakr1BCVHBqkZ_5zRwwUEsCY",1790443287140]