[{"data":1,"prerenderedAt":2395},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-leetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4":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":2385,"mathjax":2386,"meta":2387,"navigation":2386,"path":818,"published":820,"readingMinutes":2390,"seo":2391,"stem":2392,"sticky":156,"swiper_index":156,"tags":2393,"updated":156,"words":819,"__hash__":2394},"posts\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练（Javascript、TypeScript）Vol-4.md","2026-01-17-力扣百题速练（Javascript、TypeScript）Vol-4","19198",{"type":1088,"value":1089,"toc":2369},"minimark",[1090,1094,1099,1121,1133,1173,1183,1188,1225,1230,1253,1258,1291,1294,1304,1307,1309,1313,1320,1346,1356,1387,1397,1410,1423,1437,1465,1470,1473,1476,1479,1482,1488,1496,1499,1502,1507,1533,1536,1542,1546,1557,1563,1567,1582,1586,1601,1605,1617,1620,1626,1632,1634,1636,1640,1649,1686,1709,1716,1720,1731,1735,1746,1750,1761,1764,1770,1773,1779,1784,1793,1802,1807,1811,1827,1831,1845,1849,1860,1863,1870,1873,1879,1881,1883,1887,1890,1896,1901,1914,1919,1931,1936,1947,1950,1956,1960,1971,1995,2000,2015,2019,2025,2029,2035,2040,2044,2048,2054,2070,2073,2076,2082,2088,2090,2092,2096,2099,2103,2106,2123,2168,2182,2196,2201,2214,2219,2222,2251,2257,2259,2261,2265,2291,2303,2313,2317,2332,2336,2348,2352,2363],[1091,1092,1093],"p",{},"依旧刷题",[1095,1096,1098],"h2",{"id":1097},"_30串联所有单词的字串","30.串联所有单词的字串",[1091,1100,1101,1102,1106,1107,1110,1114,1115,1117,1118],{},"给定一个字符串 ",[1103,1104,1105],"code",{},"s"," 和一个字符串数组 ",[1103,1108,1109],{},"words",[1111,1112,1113],"strong",{},"。"," ",[1103,1116,1109],{}," 中所有字符串 ",[1111,1119,1120],{},"长度相同",[1091,1122,1123,1125,1126,1129,1130,1132],{},[1103,1124,1105],{}," 中的 ",[1111,1127,1128],{},"串联子串"," 是指一个包含 ",[1103,1131,1109],{}," 中所有字符串以任意顺序排列连接起来的子串",[1134,1135,1136],"ul",{},[1137,1138,1139,1140,1143,1144,1147,1148,1151,1152,1147,1155,1151,1158,1161,1162,1165,1166,1169,1170,1172],"li",{},"例如，如果 ",[1103,1141,1142],{},"words = [\"ab\",\"cd\",\"ef\"]","， 那么 ",[1103,1145,1146],{},"\"abcdef\"","， ",[1103,1149,1150],{},"\"abefcd\"","，",[1103,1153,1154],{},"\"cdabef\"",[1103,1156,1157],{},"\"cdefab\"",[1103,1159,1160],{},"\"efabcd\"","， 和 ",[1103,1163,1164],{},"\"efcdab\""," 都是串联子串。 ",[1103,1167,1168],{},"\"acdbef\""," 不是串联子串，因为他不是任何 ",[1103,1171,1109],{}," 排列的连接。",[1091,1174,1175,1176,1178,1179,1182],{},"返回所有串联子串在 ",[1103,1177,1105],{}," 中的开始索引。你可以以 ",[1111,1180,1181],{},"任意顺序"," 返回答案。",[1091,1184,1185],{},[1111,1186,1187],{},"示例 1：",[1091,1189,1190,1193,1196,1199,1202,1205,1208,1209,1212,1213,1216,1217,1220,1221,1224],{},[1111,1191,1192],{},"输入：",[1103,1194,1195],{},"s = \"barfoothefoobarman\", words = [\"foo\",\"bar\"]",[1111,1197,1198],{},"输出：",[1103,1200,1201],{},"[0,9]",[1111,1203,1204],{},"解释：",[1103,1206,1207],{},"因为 words.length == 2 "," 同时 ",[1103,1210,1211],{},"words[i].length == 3","，连接的子字符串的长度必须为 6\n子串 \"barfoo\" 开始位置是 0。它是 words 中以 ",[1103,1214,1215],{},"[\"bar\",\"foo\"]"," 顺序排列的连接\n子串 \"foobar\" 开始位置是 9。它是 words 中以 ",[1103,1218,1219],{},"[\"foo\",\"bar\"]"," 顺序排列的连接\n输出顺序无关紧要。返回 ",[1103,1222,1223],{},"[9,0]"," 也是可以的",[1091,1226,1227],{},[1111,1228,1229],{},"示例 2：",[1091,1231,1232,1234,1237,1239,1242,1244,1245,1248,1249,1252],{},[1111,1233,1192],{},[1103,1235,1236],{},"s = \"wordgoodgoodgoodbestword\", words = [\"word\",\"good\",\"best\",\"word\"]",[1111,1238,1198],{},[1103,1240,1241],{},"[]",[1111,1243,1204],{}," 因为 ",[1103,1246,1247],{},"words.length == 4"," 并且 ",[1103,1250,1251],{},"words[i].length == 4","，所以串联子串的长度必须为 16\ns 中没有子串长度为 16 并且等于 words 的任何顺序排列的连接。\n所以我们返回一个空数组。",[1091,1254,1255],{},[1111,1256,1257],{},"示例 3：",[1091,1259,1260,1262,1263,1266,1262,1268,1271,1273,1274,1278,1279,1282,1283,1286,1287,1290],{},[1111,1261,1192],{}," ",[1103,1264,1265],{},"s = \"barfoofoobarthefoobarman\", words = [\"bar\",\"foo\",\"the\"]",[1111,1267,1198],{},[1103,1269,1270],{},"[6,9,12]",[1111,1272,1204],{}," 因为 words.length == 3 并且 words",[1275,1276,1277],"span",{},"i",".length == 3，所以串联子串的长度必须为 9\n子串 \"foobarthe\" 开始位置是 6。它是 words 中以 ",[1103,1280,1281],{},"[\"foo\",\"bar\",\"the\"]"," 顺序排列的连接\n子串 \"barthefoo\" 开始位置是 9。它是 words 中以 ",[1103,1284,1285],{},"[\"bar\",\"the\",\"foo\"]"," 顺序排列的连接\n子串 \"thefoobar\" 开始位置是 12。它是 words 中以 ",[1103,1288,1289],{},"[\"the\",\"foo\",\"bar\"]"," 顺序排列的连接",[1091,1292,1293],{},"滑动窗口 + 哈希表解题",[1295,1296,1302],"pre",{"className":1297,"code":1299,"language":1300,"meta":1301},[1298],"language-ts","function findSubstring(s: string, words: string[]): number[] {\n  const result: number[] = []\n  if (s.length === 0 || words.length === 0) return result\n\n  const wordLen = words[0].length \u002F\u002F 每个单词长度\n  const totalLen = wordLen * words.length \u002F\u002F 总共需要匹配的长度\n  const wordCount = new Map\u003Cstring, number>() \u002F\u002F 目标单词的频率表\n\n  \u002F\u002F 统计目标单词出现次数\n  for (const word of words) {\n    wordCount.set(word, (wordCount.get(word) || 0) + 1)\n  }\n\n  \u002F\u002F 对每一种可能的起点偏移量进行滑动窗口\n  for (let i = 0; i \u003C wordLen; i++) {\n    \u002F\u002F 当前窗口内已经匹配到的单词数\n    let matchCount = 0\n    \u002F\u002F 当前窗口的单词频率统计（临时）\n    const window = new Map\u003Cstring, number>()\n\n    \u002F\u002F 滑动窗口右边界\n    for (let right = i; right + wordLen \u003C= s.length; right += wordLen) {\n      \u002F\u002F 取出当前单词\n      const word = s.substring(right, right + wordLen)\n\n      \u002F\u002F 如果这个单词根本不在目标集合里，直接跳过整个窗口\n      if (!wordCount.has(word)) {\n        \u002F\u002F 重置窗口\n        window.clear()\n        matchCount = 0\n        continue\n      }\n\n      \u002F\u002F 记录当前窗口单词出现次数\n      window.set(word, (window.get(word) || 0) + 1)\n\n      \u002F\u002F 如果当前单词出现次数 ≤ 需要的次数，匹配数+1\n      if (window.get(word)! \u003C= wordCount.get(word)!) {\n        matchCount++\n      }\n\n      \u002F\u002F 窗口大小超过目标长度，需要左移\n      if (right - i + wordLen > totalLen) {\n        const leftWord = s.substring(i, i + wordLen)\n        if (wordCount.has(leftWord)) {\n          if (window.get(leftWord)! \u003C= wordCount.get(leftWord)!) {\n            matchCount--\n          }\n          window.set(leftWord, window.get(leftWord)! - 1)\n          if (window.get(leftWord) === 0) {\n            window.delete(leftWord)\n          }\n        }\n        i += wordLen \u002F\u002F 左边界移动\n      }\n\n      \u002F\u002F 完美匹配\n      if (matchCount === words.length) {\n        result.push(i)\n      }\n    }\n  }\n\n  return result\n}\n","ts","",[1103,1303,1299],{"__ignoreMap":1301},[1305,1306],"hr",{},[1305,1308],{},[1095,1310,1312],{"id":1311},"_31下一个排列","31.下一个排列",[1091,1314,1315,1316,1319],{},"整数数组的一个 ",[1111,1317,1318],{},"排列"," 就是将其所有成员以序列或线性顺序排列。",[1134,1321,1322],{},[1137,1323,1324,1325,1328,1329,1332,1333,1336,1337,1336,1340,1336,1343,1114],{},"例如，",[1103,1326,1327],{},"arr = [1,2,3]"," ，以下这些都可以视作 ",[1103,1330,1331],{},"arr"," 的排列：",[1103,1334,1335],{},"[1,2,3]","、",[1103,1338,1339],{},"[1,3,2]",[1103,1341,1342],{},"[3,1,2]",[1103,1344,1345],{},"[2,3,1]",[1091,1347,1348,1349,1352,1353,1355],{},"整数数组的 ",[1111,1350,1351],{},"下一个排列"," 是指其整数的下一个字典序更大的排列。更正式地，如果数组的所有排列根据其字典顺序从小到大排列在一个容器中，那么数组的 ",[1111,1354,1351],{}," 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列，那么这个数组必须重排为字典序最小的排列（即，其元素按升序排列）。",[1134,1357,1358,1366,1374],{},[1137,1359,1324,1360,1362,1363,1365],{},[1103,1361,1327],{}," 的下一个排列是 ",[1103,1364,1339],{}," 。",[1137,1367,1368,1369,1362,1372,1365],{},"类似地，",[1103,1370,1371],{},"arr = [2,3,1]",[1103,1373,1342],{},[1137,1375,1376,1377,1362,1380,1382,1383,1386],{},"而 ",[1103,1378,1379],{},"arr = [3,2,1]",[1103,1381,1335],{}," ，因为 ",[1103,1384,1385],{},"[3,2,1]"," 不存在一个字典序更大的排列。",[1091,1388,1389,1390,1393,1394,1396],{},"给你一个整数数组 ",[1103,1391,1392],{},"nums"," ，找出 ",[1103,1395,1392],{}," 的下一个排列。\n必须原地修改，只允许使用额外常数空间。",[1091,1398,1399,1401,1403,1406,1408],{},[1111,1400,1187],{},[1111,1402,1192],{},[1103,1404,1405],{},"nums = [1,2,3]",[1111,1407,1198],{},[1103,1409,1339],{},[1091,1411,1412,1414,1416,1419,1421],{},[1111,1413,1229],{},[1111,1415,1192],{},[1103,1417,1418],{},"nums = [3,2,1]",[1111,1420,1198],{},[1103,1422,1335],{},[1091,1424,1425,1427,1429,1432,1434],{},[1111,1426,1257],{},[1111,1428,1192],{},[1103,1430,1431],{},"nums = [1,1,5]",[1111,1433,1198],{},[1103,1435,1436],{},"[1,5,1]",[1091,1438,1439,1440,1443,1444,1447,1448,1451,1452,1455,1456,1458,1459,1461,1462,1464],{},"从右向左，找到第一个位置i，使得",[1103,1441,1442],{},"nums[i] \u003C nums[i+1]","，那么",[1103,1445,1446],{},"nums[i :-1]","就是我们需要变换的区域\n在",[1103,1449,1450],{},"nums[i+1 : -1]","自右向左中找到第一个大于",[1103,1453,1454],{},"nums[i]","的元素，将它与",[1103,1457,1454],{},"交换，此时",[1103,1460,1450],{},"是降序的\n将",[1103,1463,1450],{},"升序排列，即将它们逆序",[1091,1466,1467],{},[1111,1468,1469],{},"解题的话，这道题目其实是一道找规律的题目",[1091,1471,1472],{},"对比一下这两个数字，探究一下是怎样变化的：\n143652\n145236",[1091,1474,1475],{},"后四位都发生了改变，以保证让这个数大一点点。观察到前两位是没有变化的，也就是如果这个数字是3652，那么下一个排列也是5236，与前面的数字暂时无关。\n所以，我们其实要关注的是最小的变换区域。这个区域应该是从右向左找，以确保变换后的排列与当前的排列是紧邻的。那么怎样找到这一区域呢？",[1091,1477,1478],{},"为什么52不能是变换区域？因为52已经是这两个数字能组成的最大排列了，所以没法再进一步变大，因此不能变换\n以此类推，为什么652也不能是变换区域呢？同样是因为已经达到了最大排列",[1091,1480,1481],{},"总结一下，降序排列的部分已经达到了最大的排列，不能再增大。也正是处于这一点，我们最终找到了3652，其中3与6不是降序排列的，并且是从右向左查找过程中的第一个升序段，以保证变换的区域最小。",[1091,1483,1484,1487],{},[1111,1485,1486],{},"如何变换？","\n我们已经弄清楚了怎样确定变换区域，因此下面将目光集中到这一小段上：",[1295,1489,1494],{"className":1490,"code":1492,"language":1493},[1491],"language-text","3652 ——> 5236\n","text",[1103,1495,1492],{"__ignoreMap":1301},[1091,1497,1498],{},"我们想要让3652增大，但只增大最小的幅度。由于652已经达到最大，因此以3开头已经达到最大了，所以如果想继续增大，不能再以3开头，要在剩下的数字中比3大、但是只能大一点点的数字进行开头，所以这个数字应该是大于3的数字中最小的，也就是5",[1091,1500,1501],{},"现在已经知道了要怎样找下一个开头，接下来仅剩的问题就是除了开头以外的数字怎样排列。换了一个开头，现在其实需要的是这个新的开头的最小排列，因此剩下的数字升序排列就是符合要求的",[1091,1503,1504],{},[1111,1505,1506],{},"算法总结",[1091,1508,1509,1516,1528],{},[1111,1510,1439,1511,1443,1513,1515],{},[1103,1512,1442],{},[1103,1514,1446],{},"就是我们需要变换的区域",[1111,1517,1518,1519,1451,1521,1455,1523,1458,1525,1527],{},"在",[1103,1520,1450],{},[1103,1522,1454],{},[1103,1524,1454],{},[1103,1526,1450],{},"是降序的",[1111,1529,1530,1531,1464],{},"将",[1103,1532,1450],{},[1091,1534,1535],{},"感觉面试根本现场想不到，解题思路要背",[1295,1537,1540],{"className":1538,"code":1539,"language":1300,"meta":1301},[1298],"function nextPermutation(nums: number[]): void {\n  let index = -1\n\n  for (let i = nums.length - 2; i >= 0; i--) {\n    if (nums[i] \u003C nums[i + 1]) {\n      index = i\n      break\n    }\n  }\n  for (let j = nums.length - 1; j > index; j--) {\n    if (nums[j] > nums[index]) {\n      ;[nums[index], nums[j]] = [nums[j], nums[index]]\n      break\n    }\n  }\n\n  let left = index + 1\n  let right = nums.length - 1\n  while (left \u003C right) {\n    ;[nums[left], nums[right]] = [nums[right], nums[left]]\n    left++\n    right--\n  }\n}\n",[1103,1541,1539],{"__ignoreMap":1301},[1095,1543,1545],{"id":1544},"_32-最长有效括号","32. 最长有效括号",[1091,1547,1548,1549,1552,1553,1556],{},"给你一个只包含 ",[1103,1550,1551],{},"'('"," 和 ",[1103,1554,1555],{},"')'"," 的字符串，找出最长有效（格式正确且连续）括号 子串 的长度。",[1091,1558,1559,1560,1113],{},"左右括号匹配，即每个左括号都有对应的右括号将其闭合的字符串是格式正确的，比如 ",[1103,1561,1562],{},"\"(()())\"",[1091,1564,1565],{},[1111,1566,1187],{},[1091,1568,1569,1571,1574,1576,1579,1581],{},[1111,1570,1192],{},[1103,1572,1573],{},"s = \"(()\"",[1111,1575,1198],{},[1103,1577,1578],{},"2",[1111,1580,1204],{}," 最长有效括号子串是 \"()\"",[1091,1583,1584],{},[1111,1585,1229],{},[1091,1587,1588,1590,1593,1595,1598,1600],{},[1111,1589,1192],{},[1103,1591,1592],{},"s = \")()())\"",[1111,1594,1198],{},[1103,1596,1597],{},"4",[1111,1599,1204],{}," 最长有效括号子串是 \"()()\"",[1091,1602,1603],{},[1111,1604,1257],{},[1091,1606,1607,1609,1612,1614],{},[1111,1608,1192],{},[1103,1610,1611],{},"s = \"\"",[1111,1613,1198],{},[1103,1615,1616],{},"0",[1091,1618,1619],{},"解题的话用栈记录「还没匹配的左括号下标」+ 「上一个有效结束位置」\n遇到右括号就计算长度，并更新 max_len",[1295,1621,1624],{"className":1622,"code":1623,"language":1493},[1491],"case     栈操作                 何时更新答案                     长度怎么算\n──────   ──────────────────     ─────────────────────────────   ────────────\n遇 '('   stack.push(i);         不更新                          —\n遇 ')'   先 pop()               —                               —\n         ① 弹成功，栈还有东西   更新答案                        i - stack.top()\n         ② 弹成功，栈空了       更新答案                        i - (-1) 即 i+1\n         ③ 弹失败（栈本来就空） 不更新，把自己当新墙            stack.push(i);\n",[1103,1625,1623],{"__ignoreMap":1301},[1295,1627,1630],{"className":1628,"code":1629,"language":1300,"meta":1301},[1298],"function longestValidParentheses(s: string): number {\n  let maxLen = 0\n\n  for (let i = 0; i \u003C s.length; i++) {\n    if (s[i] === '(') {\n      stack.push(i)\n    } else {\n      stack.pop()\n      if (stack.length === 0) {\n        stack.push(i)\n      } else {\n        const length = i - stack[stack.length - 1]\n        maxLen = Math.max(maxLen, length)\n      }\n    }\n  }\n  return maxLen\n}\n",[1103,1631,1629],{"__ignoreMap":1301},[1305,1633],{},[1305,1635],{},[1095,1637,1639],{"id":1638},"_33搜索旋转排序数组","33.搜索旋转排序数组",[1091,1641,1642,1643,1645,1646,1365],{},"整数数组 ",[1103,1644,1392],{}," 按升序排列，数组中的值 ",[1111,1647,1648],{},"互不相同",[1091,1650,1651,1652,1654,1655,1658,1659,1662,1663,1666,1667,1670,1671,1674,1675,1678,1679,1682,1683,1365],{},"在传递给函数之前，",[1103,1653,1392],{}," 在预先未知的某个下标 ",[1103,1656,1657],{},"k","（",[1103,1660,1661],{},"0 \u003C= k \u003C nums.length","）上进行了 ",[1111,1664,1665],{},"向左旋转","，使数组变为 ",[1103,1668,1669],{},"[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]","（下标 ",[1111,1672,1673],{},"从 0 开始"," 计数）。例如， ",[1103,1676,1677],{},"[0,1,2,4,5,6,7]"," 下标 ",[1103,1680,1681],{},"3"," 上向左旋转后可能变为 ",[1103,1684,1685],{},"[4,5,6,7,0,1,2]",[1091,1687,1688,1689,1692,1693,1695,1696,1699,1700,1702,1703,1705,1706,1365],{},"给你 ",[1111,1690,1691],{},"旋转后"," 的数组 ",[1103,1694,1392],{}," 和一个整数 ",[1103,1697,1698],{},"target"," ，如果 ",[1103,1701,1392],{}," 中存在这个目标值 ",[1103,1704,1698],{}," ，则返回它的下标，否则返回 ",[1103,1707,1708],{},"-1",[1091,1710,1711,1712,1715],{},"你必须设计一个时间复杂度为 ",[1103,1713,1714],{},"O(log n)"," 的算法解决此问题。",[1091,1717,1718],{},[1111,1719,1187],{},[1091,1721,1722,1724,1727,1729],{},[1111,1723,1192],{},[1103,1725,1726],{},"nums = [4,5,6,7,0,1,2], target = 0",[1111,1728,1198],{},[1103,1730,1597],{},[1091,1732,1733],{},[1111,1734,1229],{},[1091,1736,1737,1739,1742,1744],{},[1111,1738,1192],{},[1103,1740,1741],{},"nums = [4,5,6,7,0,1,2], target = 3",[1111,1743,1198],{},[1103,1745,1708],{},[1091,1747,1748],{},[1111,1749,1257],{},[1091,1751,1752,1262,1754,1757,1262,1759],{},[1111,1753,1192],{},[1103,1755,1756],{},"nums = [1], target = 0",[1111,1758,1198],{},[1103,1760,1708],{},[1091,1762,1763],{},"主要就是二分的思想，从left和right出发，在 while(left \u003C= right) 循环中，每次计算 mid 后",[1295,1765,1768],{"className":1766,"code":1767,"language":1493},[1491],"if nums[mid] == target → 直接返回 mid\n\n否则进行分支判断：\n\n情况1：nums[left] \u003C= nums[mid]    ← 左半部分 [left...mid] 是升序的\n    此时左边这段是连续有序的\n    判断 target 是否落在这段有序区间内：\n        如果 nums[left] \u003C= target \u003C nums[mid]  → target 在左半 → right = mid-1\n        否则                                 → target 不在左半 → left = mid+1\n\n情况2：nums[left] > nums[mid]     ← 左半部分无序，则右半部分 [mid...right] 必然有序\n    判断 target 是否落在右半有序区间内：\n        如果 nums[mid] \u003C target \u003C= nums[right]  → target 在右半 → left = mid+1\n        否则                                 → target 不在右半 → right = mid-1\n",[1103,1769,1767],{"__ignoreMap":1301},[1091,1771,1772],{},"算法实现如下",[1295,1774,1777],{"className":1775,"code":1776,"language":1300,"meta":1301},[1298],"function search(nums: number[], target: number): number {\n  let left = 0\n  let right = nums.length - 1\n\n  let mid = Math.floor(left + right \u002F 2)\n\n  if (nums[mid] === nums[target]) {\n    return nums[target]\n  }\n\n  \u002F\u002F 判断左半边是否有序\n  if (nums[left] \u003C= nums[mid]) {\n    \u002F\u002F 左半边有序\n    if (target >= nums[left] && target \u003C nums[mid]) {\n      \u002F\u002F target 在有序的左半边\n      right = mid - 1\n    } else {\n      \u002F\u002F target 在可能无序的右半边\n      left = mid + 1\n    }\n  } else {\n    \u002F\u002F 右半边有序\n    if (target > nums[mid] && target \u003C= nums[right]) {\n      \u002F\u002F target 在有序的右半边\n      left = mid + 1\n    } else {\n      \u002F\u002F target 在可能无序的左半边\n      right = mid - 1\n    }\n  }\n}\n",[1103,1778,1776],{"__ignoreMap":1301},[1780,1781,1783],"h3",{"id":1782},"_34在排序数组中找出元素的第一个与最后一个位置","34.在排序数组中找出元素的第一个与最后一个位置",[1091,1785,1786,1787,1789,1790,1792],{},"给你一个按照非递减顺序排列的整数数组 ",[1103,1788,1392],{},"，和一个目标值 ",[1103,1791,1698],{},"。请你找出给定目标值在数组中的开始位置和结束位置。",[1091,1794,1795,1796,1798,1799,1113],{},"如果数组中不存在目标值 ",[1103,1797,1698],{},"，返回 ",[1103,1800,1801],{},"[-1, -1]",[1091,1803,1804,1805,1715],{},"你必须设计并实现时间复杂度为 ",[1103,1806,1714],{},[1091,1808,1809],{},[1111,1810,1187],{},[1091,1812,1813,1815,1818,1819,1822,1824],{},[1111,1814,1192],{},[1103,1816,1817],{},"nums = [","5,7,7,8,8,10]",[1103,1820,1821],{},", target = 8",[1111,1823,1198],{},[1103,1825,1826],{},"[3,4]",[1091,1828,1829],{},[1111,1830,1229],{},[1091,1832,1833,1835,1818,1837,1840,1842],{},[1111,1834,1192],{},[1103,1836,1817],{},[1103,1838,1839],{},", target = 6",[1111,1841,1198],{},[1103,1843,1844],{},"[-1,-1]",[1091,1846,1847],{},[1111,1848,1257],{},[1091,1850,1851,1853,1856,1858],{},[1111,1852,1192],{},[1103,1854,1855],{},"nums = [], target = 0",[1111,1857,1198],{},[1103,1859,1844],{},[1091,1861,1862],{},"主要就是二分的思想",[1091,1864,1865,1866,1869],{},"从left和right出发,在 while(left \u003C= right) 循环中，每次计算 mid\n",[1103,1867,1868],{},"if nums[mid] == target",",找到任意一个 target 后，向两侧暴力扩展",[1091,1871,1872],{},"以当前 mid 作为初始的左右指针起点（lindex = mid, rindex = mid）\n向左扫描：只要左边相邻位置仍然等于 target，就继续左移\n向右扫描：只要右边相邻位置仍然等于 target，就继续右移",[1295,1874,1877],{"className":1875,"code":1876,"language":1300,"meta":1301},[1298],"function searchRange(nums: number[], target: number): number[] {\n  let lf = 0\n  let rg = nums.length - 1\n\n  while (lf \u003C= rg) {\n    let mid = Math.floor((lf + rg) \u002F 2)\n    if (nums[mid] === target) {\n      let lindex = mid\n      let rindex = mid\n      while (lindex >= 0 && nums[lindex - 1] === target) {\n        lindex--\n      }\n      while (rindex \u003C nums.length && nums[rindex + 1] === target) {\n        rindex++\n      }\n      return [lindex, rindex]\n    }\n    if (target > nums[mid]) {\n      lf = mid + 1\n    } else if (target \u003C nums[mid]) {\n      rg = mid - 1\n    }\n  }\n  return [-1, -1]\n}\n",[1103,1878,1876],{"__ignoreMap":1301},[1305,1880],{},[1305,1882],{},[1095,1884,1886],{"id":1885},"_35搜索插入位置","35.搜索插入位置",[1091,1888,1889],{},"给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。",[1091,1891,1892,1893,1895],{},"请必须使用时间复杂度为 ",[1103,1894,1714],{}," 的算法",[1091,1897,1898],{},[1111,1899,1900],{},"示例 1:",[1091,1902,1903,1262,1906,1909,1262,1912],{},[1111,1904,1905],{},"输入:",[1103,1907,1908],{},"nums = [1,3,5,6], target = 5",[1111,1910,1911],{},"输出:",[1103,1913,1578],{},[1091,1915,1916],{},[1111,1917,1918],{},"示例 2:",[1091,1920,1921,1262,1923,1926,1262,1928],{},[1111,1922,1905],{},[1103,1924,1925],{},"nums = [1,3,5,6], target = 2",[1111,1927,1911],{},[1103,1929,1930],{},"1",[1091,1932,1933],{},[1111,1934,1935],{},"示例 3:",[1091,1937,1938,1262,1940,1943,1262,1945],{},[1111,1939,1905],{},[1103,1941,1942],{},"nums = [1,3,5,6], target = 7",[1111,1944,1911],{},[1103,1946,1597],{},[1091,1948,1949],{},"非常经典的二分查找",[1295,1951,1954],{"className":1952,"code":1953,"language":1300,"meta":1301},[1298],"function searchInsert(nums: number[], target: number): number {\n  let left = 0\n  let right = nums.length - 1\n  while (left \u003C= right) {\n    let mid = Math.floor((left + right) \u002F 2)\n    if (nums[mid] === target) {\n      return mid\n    }\n    if (nums[mid] > target) {\n      right = mid - 1\n    } else {\n      left = mid + 1\n    }\n  }\n  return left\n}\n",[1103,1955,1953],{"__ignoreMap":1301},[1095,1957,1959],{"id":1958},"_36有趣的数独","36.有趣的数独",[1091,1961,1962,1963,1966,1967,1970],{},"请你判断一个 ",[1103,1964,1965],{},"9 x 9"," 的数独是否有效。只需要 ",[1111,1968,1969],{},"根据以下规则"," ，验证已经填入的数字是否有效即可。",[1972,1973,1974,1981,1986],"ol",{},[1137,1975,1976,1977,1980],{},"数字 ",[1103,1978,1979],{},"1-9"," 在每一行只能出现一次。",[1137,1982,1976,1983,1985],{},[1103,1984,1979],{}," 在每一列只能出现一次。",[1137,1987,1976,1988,1990,1991,1994],{},[1103,1989,1979],{}," 在每一个以粗实线分隔的 ",[1103,1992,1993],{},"3x3"," 宫内只能出现一次。（请参考示例图）",[1091,1996,1997],{},[1111,1998,1999],{},"注意：",[1134,2001,2002,2005,2008],{},[1137,2003,2004],{},"一个有效的数独（部分已被填充）不一定是可解的。",[1137,2006,2007],{},"只需要根据以上规则，验证已经填入的数字是否有效即可。",[1137,2009,2010,2011,2014],{},"空白格用 ",[1103,2012,2013],{},"'.'"," 表示。",[1091,2016,2017],{},[1111,2018,1187],{},[1091,2020,2021],{},[2022,2023],"img",{"alt":1301,"src":2024},"https:\u002F\u002Fassets.leetcode.cn\u002Faliyun-lc-upload\u002Fuploads\u002F2021\u002F04\u002F12\u002F250px-sudoku-by-l2g-20050714svg.png",[1091,2026,2027],{},[1111,2028,1192],{},[1295,2030,2033],{"className":2031,"code":2032,"language":1493},[1491],"board =\n[[\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"]\n,[\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"]\n,[\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"]\n,[\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"]\n,[\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"]\n,[\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"]\n,[\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"]\n,[\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"]\n,[\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]]\n",[1103,2034,2032],{"__ignoreMap":1301},[1091,2036,2037,2039],{},[1111,2038,1198],{}," true",[1091,2041,2042],{},[1111,2043,1229],{},[1091,2045,2046],{},[1111,2047,1192],{},[1295,2049,2052],{"className":2050,"code":2051,"language":1493},[1491],"board =\n[[\"8\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"]\n,[\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"]\n,[\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"]\n,[\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"]\n,[\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"]\n,[\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"]\n,[\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"]\n,[\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"]\n,[\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]]\n",[1103,2053,2051],{"__ignoreMap":1301},[1091,2055,2056,2058,2059,2061,2062,2065,2066,2069],{},[1111,2057,1198],{}," false\n",[1111,2060,1204],{}," 除了第一行的第一个数字从 ",[1111,2063,2064],{},"5"," 改为 ",[1111,2067,2068],{},"8"," 以外，空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。",[1091,2071,2072],{},"解法很通俗",[1091,2074,2075],{},"判断数组有无重复项直接用这个",[1295,2077,2080],{"className":2078,"code":2079,"language":1300,"meta":1301},[1298],"const hasDuplicate = (nums) => new Set(nums).size !== nums.length\n",[1103,2081,2079],{"__ignoreMap":1301},[1295,2083,2086],{"className":2084,"code":2085,"language":1300,"meta":1301},[1298],"function isValidSudoku(board: string[][]): boolean {\n  let vali = true\n  for (let ine = 0; ine \u003C 9; ine++) {\n    linevali(ine)\n    rowvali(ine)\n    nnvali(0, 0)\n    nnvali(3, 0)\n    nnvali(6, 0)\n\n    nnvali(0, 3)\n    nnvali(3, 3)\n    nnvali(6, 3)\n\n    nnvali(0, 6)\n    nnvali(3, 6)\n    nnvali(6, 6)\n  }\n\n  function KT(arr: number[]) {\n    if (new Set(arr).size !== arr.length) {\n      vali = false\n    }\n  }\n  function linevali(num: number) {\n    let stk = []\n    for (let i = 0; i \u003C 9; i++) {\n      if (board[num][i] !== '.') {\n        stk.push(board[num][i])\n      }\n    }\n    KT(stk)\n  }\n  function rowvali(num: number) {\n    let stk = []\n    for (let i = 0; i \u003C 9; i++) {\n      if (board[i][num] !== '.') {\n        stk.push(board[i][num])\n      }\n    }\n    KT(stk)\n  }\n  function nnvali(HT: number, ST: number) {\n    let stk = []\n    for (let i = 0; i \u003C 3; i++) {\n      for (let j = 0; j \u003C 3; j++) {\n        if (board[HT + i][ST + j] !== '.') {\n          stk.push(board[HT + i][ST + j])\n        }\n      }\n    }\n    KT(stk)\n  }\n  return vali\n}\n",[1103,2087,2085],{"__ignoreMap":1301},[1305,2089],{},[1305,2091],{},[1095,2093,2095],{"id":2094},"_37解数独","37.解数独",[1091,2097,2098],{},"（TODO）",[1095,2100,2102],{"id":2101},"_38外观数列","38.外观数列",[1091,2104,2105],{},"「外观数列」是一个数位字符串序列，由递归公式定义：",[1134,2107,2108,2113],{},[1137,2109,2110],{},[1103,2111,2112],{},"countAndSay(1) = \"1\"",[1137,2114,2115,2118,2119,2122],{},[1103,2116,2117],{},"countAndSay(n)"," 是 ",[1103,2120,2121],{},"countAndSay(n-1)"," 的行程长度编码。",[1091,2124,2125,2132,2133,2136,2137,2140,2141,2144,2145,2140,2148,2144,2151,2140,2154,2157,2158,2140,2161,2164,2165,1113],{},[2126,2127,2131],"a",{"href":2128,"rel":2129},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E8%A1%8C%E7%A8%8B%E9%95%BF%E5%BA%A6%E7%BC%96%E7%A0%81\u002F2931940",[2130],"nofollow","行程长度编码","（RLE）是一种字符串压缩方法，其工作原理是通过将连续相同字符（重复两次或更多次）替换为字符重复次数（运行长度）和字符的串联。例如，要压缩字符串 ",[1103,2134,2135],{},"\"3322251\""," ，我们将 ",[1103,2138,2139],{},"\"33\""," 用 ",[1103,2142,2143],{},"\"23\""," 替换，将 ",[1103,2146,2147],{},"\"222\"",[1103,2149,2150],{},"\"32\"",[1103,2152,2153],{},"\"5\"",[1103,2155,2156],{},"\"15\""," 替换并将 ",[1103,2159,2160],{},"\"1\"",[1103,2162,2163],{},"\"11\""," 替换。因此压缩后字符串变为 ",[1103,2166,2167],{},"\"23321511\"",[1091,2169,2170,2171,2174,2175,2178,2179,2181],{},"给定一个整数 ",[1103,2172,2173],{},"n"," ，返回 ",[1111,2176,2177],{},"外观数列"," 的第 ",[1103,2180,2173],{}," 个元素。",[1091,2183,2184,2186,2188,2191,2193],{},[1111,2185,1187],{},[1111,2187,1192],{},[1103,2189,2190],{},"n = 4",[1111,2192,1198],{},[1103,2194,2195],{},"\"1211\"",[1091,2197,2198,2200],{},[1111,2199,1204],{},"\ncountAndSay(1) = \"1\"\ncountAndSay(2) = \"1\" 的行程长度编码 = \"11\"\ncountAndSay(3) = \"11\" 的行程长度编码 = \"21\"\ncountAndSay(4) = \"21\" 的行程长度编码 = \"1211\"",[1091,2202,2203,2205,2207,2210,2212],{},[1111,2204,1229],{},[1111,2206,1192],{},[1103,2208,2209],{},"n = 1",[1111,2211,1198],{},[1103,2213,2160],{},[1091,2215,2216,2218],{},[1111,2217,1204],{},"\n这是基本情况。",[1091,2220,2221],{},"解题的主要步骤：",[1972,2223,2224,2227,2248],{},[1137,2225,2226],{},"从初始字符串 \"1\" 开始",[1137,2228,2229,2230],{},"每一轮生成新字符串时：\n",[1134,2231,2232,2235,2242,2245],{},[1137,2233,2234],{},"遍历上一轮字符串",[1137,2236,2237,2238,2241],{},"统计",[1111,2239,2240],{},"连续相同字符","的个数",[1137,2243,2244],{},"遇到不同字符就把「计数+前一个字符」拼接到结果中",[1137,2246,2247],{},"最后一组也加上",[1137,2249,2250],{},"重复 n-1 次",[1295,2252,2255],{"className":2253,"code":2254,"language":1300,"meta":1301},[1298],"function countAndSay(n: number): string {\n  let current = '1'\n  for (let i = 2; i \u003C= n; i++) {\n    let next = ''\n    let count = 1\n    for (let j = 1; j \u003C current.length; j++) {\n      if (current[j] === current[j - 1]) {\n        count++\n      } else {\n        next += count + current[j - 1]\n        count = 1\n      }\n    }\n\n    next += count + current[current.length - 1]\n    current = next\n  }\n\n  return current\n}\n\u002F\u002Fruntime:5 ms\n\u002F\u002Fmemory:58.6 MB\n",[1103,2256,2254],{"__ignoreMap":1301},[1305,2258],{},[1305,2260],{},[1095,2262,2264],{"id":2263},"_39组合总和","39.组合总和",[1091,2266,2267,2268,2271,2272,2275,2276,1393,2278,2280,2281,2283,2284,2287,2288,2290],{},"给你一个 ",[1111,2269,2270],{},"无重复元素"," 的整数数组 ",[1103,2273,2274],{},"candidates"," 和一个目标整数 ",[1103,2277,1698],{},[1103,2279,2274],{}," 中可以使数字和为目标数 ",[1103,2282,1698],{}," 的 所有 ",[1111,2285,2286],{},"不同组合"," ，并以列表形式返回。你可以按 ",[1111,2289,1181],{}," 返回这些组合。",[1091,2292,2293,1125,2295,2298,2299,2302],{},[1103,2294,2274],{},[1111,2296,2297],{},"同一个"," 数字可以 ",[1111,2300,2301],{},"无限制重复被选取"," 。如果至少一个数字的被选数量不同，则两种组合是不同的。",[1091,2304,2305,2306,2308,2309,2312],{},"对于给定的输入，保证和为 ",[1103,2307,1698],{}," 的不同组合数少于 ",[1103,2310,2311],{},"150"," 个",[1091,2314,2315],{},[1111,2316,1187],{},[1091,2318,2319,2321,2324,2326,2329,2331],{},[1111,2320,1192],{},[1103,2322,2323],{},"candidates = [2,3,6,7], target = 7",[1111,2325,1198],{},[1103,2327,2328],{},"[[2,2,3],[7]]",[1111,2330,1204],{},"\n2 和 3 可以形成一组候选，2 + 2 + 3 = 7 。注意 2 可以使用多次\n7 也是一个候选， 7 = 7\n仅有这两种组合",[1091,2333,2334],{},[1111,2335,1229],{},[1091,2337,2338,1262,2340,2343,1262,2345],{},[1111,2339,1905],{},[1103,2341,2342],{},"candidates = [2,3,5], target = 8",[1111,2344,1911],{},[1103,2346,2347],{},"[[2,2,2,2],[2,3,3],[3,5]]",[1091,2349,2350],{},[1111,2351,1257],{},[1091,2353,2354,1262,2356,2359,1262,2361],{},[1111,2355,1905],{},[1103,2357,2358],{},"candidates = [2], target = 1",[1111,2360,1911],{},[1103,2362,1241],{},[1295,2364,2367],{"className":2365,"code":2366,"language":1300,"meta":1301},[1298],"function combinationSum(candidates: number[], target: number): number[][] {\n  const result: number[][] = []\n  const path: number[] = []\n\n  candidates.sort((a, b) => a - b)\n\n  function bt(start: number, remain: number) {\n    if (remain === 0) {\n      result.push([...path])\n      return\n    }\n    if (remain \u003C 0) {\n      return\n    }\n    for (let i = start; i \u003C candidates.length; i++) {\n      if (candidates[i] > remain) {\n        break\n      }\n      path.push(candidates[i])\n      bt(i, remain - candidates[i])\n      path.pop()\n    }\n  }\n  bt(0, target)\n  return result\n}\n",[1103,2368,2366],{"__ignoreMap":1301},{"title":1301,"searchDepth":2370,"depth":2370,"links":2371},4,[2372,2374,2375,2376,2380,2381,2382,2383,2384],{"id":1097,"depth":2373,"text":1098},2,{"id":1311,"depth":2373,"text":1312},{"id":1544,"depth":2373,"text":1545},{"id":1638,"depth":2373,"text":1639,"children":2377},[2378],{"id":1782,"depth":2379,"text":1783},3,{"id":1885,"depth":2373,"text":1886},{"id":1958,"depth":2373,"text":1959},{"id":2094,"depth":2373,"text":2095},{"id":2101,"depth":2373,"text":2102},{"id":2263,"depth":2373,"text":2264},"md",true,{"uuid":2388,"slots":2389},"38565450-f3b4-11f0-b54e-479bc980e366",{},10,{"title":1085,"description":1093},"posts\u002Fleetcode\u002F2026-01-17-力扣百题速练（Javascript、TypeScript）Vol-4",[199,40,161,175],"KxfJsoK0NO1IVZbqVZfyeLdg_a43_kyz5eKVHGcfNg0",1790443286414]