[{"data":1,"prerenderedAt":2548},["ShallowReactive",2],{"navigation_docs":3,"-phong-van-ngan-hang-cau-hoi-dsa-coding":420,"-phong-van-ngan-hang-cau-hoi-dsa-coding-surround":2543},[4,153],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Phỏng vấn .NET","i-lucide-briefcase","\u002Fphong-van","1.phong-van",[10,27,66,111,128],{"title":11,"icon":12,"path":13,"stem":14,"children":15,"page":26},"Tổng quan","i-lucide-compass","\u002Fphong-van\u002Ftong-quan","1.phong-van\u002F1.tong-quan",[16,21],{"title":17,"path":18,"stem":19,"icon":20},"Thị trường HCM","\u002Fphong-van\u002Ftong-quan\u002Fthi-truong","1.phong-van\u002F1.tong-quan\u002F1.thi-truong","i-lucide-trending-up",{"title":22,"path":23,"stem":24,"icon":25},"Lộ trình 7 ngày","\u002Fphong-van\u002Ftong-quan\u002Flo-trinh","1.phong-van\u002F1.tong-quan\u002F2.lo-trinh","i-lucide-calendar-days",false,{"title":22,"icon":25,"path":28,"stem":29,"children":30,"page":26},"\u002Fphong-van\u002Flo-trinh","1.phong-van\u002F2.lo-trinh",[31,36,41,46,51,56,61],{"title":32,"path":33,"stem":34,"icon":35},"Ngày 1 — C# cơ bản","\u002Fphong-van\u002Flo-trinh\u002Fngay-1-csharp-co-ban","1.phong-van\u002F2.lo-trinh\u002F1.ngay-1-csharp-co-ban","i-lucide-1",{"title":37,"path":38,"stem":39,"icon":40},"Ngày 2 — OOP và SOLID","\u002Fphong-van\u002Flo-trinh\u002Fngay-2-oop-solid","1.phong-van\u002F2.lo-trinh\u002F2.ngay-2-oop-solid","i-lucide-2",{"title":42,"path":43,"stem":44,"icon":45},"Ngày 3 — C# nâng cao","\u002Fphong-van\u002Flo-trinh\u002Fngay-3-csharp-nang-cao","1.phong-van\u002F2.lo-trinh\u002F3.ngay-3-csharp-nang-cao","i-lucide-3",{"title":47,"path":48,"stem":49,"icon":50},"Ngày 4 — Database và SQL","\u002Fphong-van\u002Flo-trinh\u002Fngay-4-database-sql","1.phong-van\u002F2.lo-trinh\u002F4.ngay-4-database-sql","i-lucide-4",{"title":52,"path":53,"stem":54,"icon":55},"Ngày 5 — ASP.NET Core và EF Core","\u002Fphong-van\u002Flo-trinh\u002Fngay-5-aspnet-efcore","1.phong-van\u002F2.lo-trinh\u002F5.ngay-5-aspnet-efcore","i-lucide-5",{"title":57,"path":58,"stem":59,"icon":60},"Ngày 6 — DSA coding","\u002Fphong-van\u002Flo-trinh\u002Fngay-6-dsa","1.phong-van\u002F2.lo-trinh\u002F6.ngay-6-dsa","i-lucide-6",{"title":62,"path":63,"stem":64,"icon":65},"Ngày 7 — Mock và HR","\u002Fphong-van\u002Flo-trinh\u002Fngay-7-mock-interview","1.phong-van\u002F2.lo-trinh\u002F7.ngay-7-mock-interview","i-lucide-7",{"title":67,"icon":68,"path":69,"stem":70,"children":71,"page":26},"Ngân hàng câu hỏi","i-lucide-database","\u002Fphong-van\u002Fngan-hang-cau-hoi","1.phong-van\u002F3.ngan-hang-cau-hoi",[72,77,82,87,92,97,102,107],{"title":73,"path":74,"stem":75,"icon":76},"C# (60+ câu)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Fcsharp","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F1.csharp","i-lucide-hash",{"title":78,"path":79,"stem":80,"icon":81},"OOP và SOLID (40+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Foop","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F2.oop","i-lucide-shapes",{"title":83,"path":84,"stem":85,"icon":86},"SQL (40+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Fsql","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F3.sql","i-lucide-database-zap",{"title":88,"path":89,"stem":90,"icon":91},"ASP.NET và EF (50+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Faspnet-ef","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F4.aspnet-ef","i-lucide-server",{"title":93,"path":94,"stem":95,"icon":96},"DSA và Coding (30+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Fdsa-coding","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F5.dsa-coding","i-lucide-binary",{"title":98,"path":99,"stem":100,"icon":101},"HR và Soft skill (25+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Fhr-behavior","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F6.hr-behavior","i-lucide-users",{"title":103,"path":104,"stem":105,"icon":106},"Design Pattern (55+)","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Fdesign-pattern","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F7.design-pattern","i-lucide-puzzle",{"title":108,"path":109,"stem":110,"icon":91},"ASP.NET MVC và Web API","\u002Fphong-van\u002Fngan-hang-cau-hoi\u002Faspnet-mvc-webapi","1.phong-van\u002F3.ngan-hang-cau-hoi\u002F8.aspnet-mvc-webapi",{"title":112,"itle":113,"icon":114,"path":115,"stem":116,"children":117,"page":26},"Tai Lieu","Tài liệu và Cheat sheet","i-lucide-book-marked","\u002Fphong-van\u002Ftai-lieu","1.phong-van\u002F4.tai-lieu",[118,123],{"title":119,"path":120,"stem":121,"icon":122},"Cheat Sheet","\u002Fphong-van\u002Ftai-lieu\u002Fcheatsheet","1.phong-van\u002F4.tai-lieu\u002F1.cheatsheet","i-lucide-clipboard-list",{"title":124,"path":125,"stem":126,"icon":127},"Nguồn tham khảo","\u002Fphong-van\u002Ftai-lieu\u002Fnguon","1.phong-van\u002F4.tai-lieu\u002F2.nguon","i-lucide-link",{"title":129,"icon":130,"path":131,"stem":132,"children":133,"page":26},"Phỏng vấn English","i-lucide-globe","\u002Fphong-van\u002Fenglish-interview","1.phong-van\u002F5.english-interview",[134,138,143,148],{"title":135,"path":136,"stem":137,"icon":130},"Tổng quan English","\u002Fphong-van\u002Fenglish-interview\u002Ftong-quan","1.phong-van\u002F5.english-interview\u002F1.tong-quan",{"title":139,"path":140,"stem":141,"icon":142},"Vocabulary","\u002Fphong-van\u002Fenglish-interview\u002Fvocabulary","1.phong-van\u002F5.english-interview\u002F2.vocabulary","i-lucide-book-a",{"title":144,"path":145,"stem":146,"icon":147},"Technical Q và A (EN)","\u002Fphong-van\u002Fenglish-interview\u002Ftechnical-en","1.phong-van\u002F5.english-interview\u002F3.technical-en","i-lucide-code",{"title":149,"path":150,"stem":151,"icon":152},"Behavioral (EN)","\u002Fphong-van\u002Fenglish-interview\u002Fbehavioral-en","1.phong-van\u002F5.english-interview\u002F4.behavioral-en","i-lucide-message-square-text",{"title":154,"icon":155,"path":156,"stem":157,"children":158},"Tự học","i-lucide-graduation-cap","\u002Ftu-hoc","2.tu-hoc",[159,161,287,310,333,357,384],{"title":154,"path":156,"stem":160,"icon":155},"2.tu-hoc\u002Findex",{"title":162,"icon":68,"path":163,"stem":164,"children":165},"Database","\u002Ftu-hoc\u002Fdatabase","2.tu-hoc\u002F1.database\u002Findex",[166,167,197,222,243,248],{"title":162,"path":163,"stem":164,"icon":68},{"title":168,"icon":91,"path":169,"stem":170,"children":171,"page":26},"SQL Server","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server","2.tu-hoc\u002F1.database\u002F2.sql-server",[172,177,182,187,192],{"title":173,"path":174,"stem":175,"icon":176},"1. Giới thiệu và Cài đặt","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server\u002Fgioi-thieu-cai-dat","2.tu-hoc\u002F1.database\u002F2.sql-server\u002F1.gioi-thieu-cai-dat","i-lucide-play-circle",{"title":178,"path":179,"stem":180,"icon":181},"2. Cú pháp cơ bản","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server\u002Fcu-phap-co-ban","2.tu-hoc\u002F1.database\u002F2.sql-server\u002F2.cu-phap-co-ban","i-lucide-code-2",{"title":183,"path":184,"stem":185,"icon":186},"3. Truy vấn nâng cao","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server\u002Ftruy-van-nang-cao","2.tu-hoc\u002F1.database\u002F2.sql-server\u002F3.truy-van-nang-cao","i-lucide-git-merge",{"title":188,"path":189,"stem":190,"icon":191},"4. Đặc thù và Performance","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server\u002Fdac-thu-performance","2.tu-hoc\u002F1.database\u002F2.sql-server\u002F4.dac-thu-performance","i-lucide-gauge",{"title":193,"path":194,"stem":195,"icon":196},"5. Q và A phỏng vấn","\u002Ftu-hoc\u002Fdatabase\u002Fsql-server\u002Fcau-hoi-phong-van","2.tu-hoc\u002F1.database\u002F2.sql-server\u002F5.cau-hoi-phong-van","i-lucide-message-circle-question",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":26},"PostgreSQL","i-simple-icons-postgresql","\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql","2.tu-hoc\u002F1.database\u002F3.postgresql",[203,206,209,212,215,218],{"title":173,"path":204,"stem":205,"icon":176},"\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Fgioi-thieu-cai-dat","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F1.gioi-thieu-cai-dat",{"title":178,"path":207,"stem":208,"icon":181},"\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Fcu-phap-co-ban","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F2.cu-phap-co-ban",{"title":183,"path":210,"stem":211,"icon":186},"\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Ftruy-van-nang-cao","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F3.truy-van-nang-cao",{"title":188,"path":213,"stem":214,"icon":191},"\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Fdac-thu-performance","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F4.dac-thu-performance",{"title":193,"path":216,"stem":217,"icon":196},"\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Fcau-hoi-phong-van","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F5.cau-hoi-phong-van",{"title":219,"path":220,"stem":221,"icon":96},"6. Tích hợp C# và Postgres","\u002Ftu-hoc\u002Fdatabase\u002Fpostgresql\u002Ftich-hop-csharp","2.tu-hoc\u002F1.database\u002F3.postgresql\u002F6.tich-hop-csharp",{"title":223,"icon":224,"path":225,"stem":226,"children":227,"page":26},"MySQL","i-simple-icons-mysql","\u002Ftu-hoc\u002Fdatabase\u002Fmysql","2.tu-hoc\u002F1.database\u002F4.mysql",[228,231,234,237,240],{"title":173,"path":229,"stem":230,"icon":176},"\u002Ftu-hoc\u002Fdatabase\u002Fmysql\u002Fgioi-thieu-cai-dat","2.tu-hoc\u002F1.database\u002F4.mysql\u002F1.gioi-thieu-cai-dat",{"title":178,"path":232,"stem":233,"icon":181},"\u002Ftu-hoc\u002Fdatabase\u002Fmysql\u002Fcu-phap-co-ban","2.tu-hoc\u002F1.database\u002F4.mysql\u002F2.cu-phap-co-ban",{"title":183,"path":235,"stem":236,"icon":186},"\u002Ftu-hoc\u002Fdatabase\u002Fmysql\u002Ftruy-van-nang-cao","2.tu-hoc\u002F1.database\u002F4.mysql\u002F3.truy-van-nang-cao",{"title":188,"path":238,"stem":239,"icon":191},"\u002Ftu-hoc\u002Fdatabase\u002Fmysql\u002Fdac-thu-performance","2.tu-hoc\u002F1.database\u002F4.mysql\u002F4.dac-thu-performance",{"title":193,"path":241,"stem":242,"icon":196},"\u002Ftu-hoc\u002Fdatabase\u002Fmysql\u002Fcau-hoi-phong-van","2.tu-hoc\u002F1.database\u002F4.mysql\u002F5.cau-hoi-phong-van",{"title":244,"path":245,"stem":246,"icon":247},"So sánh 3 RDBMS","\u002Ftu-hoc\u002Fdatabase\u002Fso-sanh","2.tu-hoc\u002F1.database\u002F5.so-sanh","i-lucide-columns-3",{"title":249,"path":250,"stem":251,"children":252,"icon":254},"Supabase (BaaS)","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase","2.tu-hoc\u002F1.database\u002F6.supabase\u002Findex",[253,255,259,264,269,274,278,283],{"title":249,"path":250,"stem":251,"icon":254},"i-simple-icons-supabase",{"title":256,"path":257,"stem":258,"icon":68},"1. Database","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Fdatabase","2.tu-hoc\u002F1.database\u002F6.supabase\u002F1.database",{"title":260,"path":261,"stem":262,"icon":263},"2. Authentication","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Fauthentication","2.tu-hoc\u002F1.database\u002F6.supabase\u002F2.authentication","i-lucide-key",{"title":265,"path":266,"stem":267,"icon":268},"3. Storage & Realtime","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Fstorage-realtime","2.tu-hoc\u002F1.database\u002F6.supabase\u002F3.storage-realtime","i-lucide-zap",{"title":270,"path":271,"stem":272,"icon":273},"4. Edge Functions & AI","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Ffunctions-ai","2.tu-hoc\u002F1.database\u002F6.supabase\u002F4.functions-ai","i-lucide-brain",{"title":275,"path":276,"stem":277,"icon":181},"5. API & SDKs","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Fapi-sdk","2.tu-hoc\u002F1.database\u002F6.supabase\u002F5.api-sdk",{"title":279,"path":280,"stem":281,"icon":282},"6. Platform & Deploy","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Fplatform-deploy","2.tu-hoc\u002F1.database\u002F6.supabase\u002F6.platform-deploy","i-lucide-cloud",{"title":284,"path":285,"stem":286,"icon":196},"7. Interview & Q&A","\u002Ftu-hoc\u002Fdatabase\u002Fsupabase\u002Finterview","2.tu-hoc\u002F1.database\u002F6.supabase\u002F7.interview",{"title":288,"icon":289,"path":290,"stem":291,"children":292},"TypeScript","i-simple-icons-typescript","\u002Ftu-hoc\u002Ftypescript","2.tu-hoc\u002F2.typescript\u002Findex",[293,294,297,301,306],{"title":288,"path":290,"stem":291,"icon":289},{"title":173,"path":295,"stem":296,"icon":176},"\u002Ftu-hoc\u002Ftypescript\u002Fgioi-thieu-cai-dat","2.tu-hoc\u002F2.typescript\u002F1.gioi-thieu-cai-dat",{"title":298,"path":299,"stem":300,"icon":81},"2. Type System","\u002Ftu-hoc\u002Ftypescript\u002Ftype-system","2.tu-hoc\u002F2.typescript\u002F2.type-system",{"title":302,"path":303,"stem":304,"icon":305},"3. Advanced types","\u002Ftu-hoc\u002Ftypescript\u002Fadvanced-types","2.tu-hoc\u002F2.typescript\u002F3.advanced-types","i-lucide-braces",{"title":307,"path":308,"stem":309,"icon":196},"4. Q và A phỏng vấn","\u002Ftu-hoc\u002Ftypescript\u002Fcau-hoi-phong-van","2.tu-hoc\u002F2.typescript\u002F4.cau-hoi-phong-van",{"title":311,"icon":81,"path":312,"stem":313,"children":314},"OOP","\u002Ftu-hoc\u002Foop","2.tu-hoc\u002F3.oop\u002Findex",[315,316,321,326,330],{"title":311,"path":312,"stem":313,"icon":81},{"title":317,"path":318,"stem":319,"icon":320},"1. Bốn tính chất","\u002Ftu-hoc\u002Foop\u002F4-tinh-chat","2.tu-hoc\u002F3.oop\u002F1.4-tinh-chat","i-lucide-circle-dot",{"title":322,"path":323,"stem":324,"icon":325},"2. SOLID","\u002Ftu-hoc\u002Foop\u002Fsolid","2.tu-hoc\u002F3.oop\u002F2.solid","i-lucide-shield",{"title":327,"path":328,"stem":329,"icon":106},"3. Design Pattern","\u002Ftu-hoc\u002Foop\u002Fdesign-pattern","2.tu-hoc\u002F3.oop\u002F3.design-pattern",{"title":307,"path":331,"stem":332,"icon":196},"\u002Ftu-hoc\u002Foop\u002Fcau-hoi-phong-van","2.tu-hoc\u002F3.oop\u002F4.cau-hoi-phong-van",{"title":334,"icon":305,"path":335,"stem":336,"children":337},"Generic","\u002Ftu-hoc\u002Fgeneric","2.tu-hoc\u002F4.generic\u002Findex",[338,339,344,349,354],{"title":334,"path":335,"stem":336,"icon":305},{"title":340,"path":341,"stem":342,"icon":343},"1. Khái niệm và cú pháp","\u002Ftu-hoc\u002Fgeneric\u002Fkhai-niem","2.tu-hoc\u002F4.generic\u002F1.khai-niem","i-lucide-book",{"title":345,"path":346,"stem":347,"icon":348},"2. Constraint và Variance","\u002Ftu-hoc\u002Fgeneric\u002Fconstraint-variance","2.tu-hoc\u002F4.generic\u002F2.constraint-variance","i-lucide-filter",{"title":350,"path":351,"stem":352,"icon":353},"3. C# vs TS","\u002Ftu-hoc\u002Fgeneric\u002Fso-sanh","2.tu-hoc\u002F4.generic\u002F3.so-sanh","i-lucide-git-compare",{"title":307,"path":355,"stem":356,"icon":196},"\u002Ftu-hoc\u002Fgeneric\u002Fcau-hoi-phong-van","2.tu-hoc\u002F4.generic\u002F4.cau-hoi-phong-van",{"title":358,"icon":359,"path":360,"stem":361,"children":362},"Nuxt 4","i-simple-icons-nuxt","\u002Ftu-hoc\u002Fnuxt-4","2.tu-hoc\u002F5.nuxt-4\u002Findex",[363,364,367,372,376,379],{"title":358,"path":360,"stem":361,"icon":359},{"title":173,"path":365,"stem":366,"icon":176},"\u002Ftu-hoc\u002Fnuxt-4\u002Fgioi-thieu-cai-dat","2.tu-hoc\u002F5.nuxt-4\u002F1.gioi-thieu-cai-dat",{"title":368,"path":369,"stem":370,"icon":371},"2. Routing và Rendering","\u002Ftu-hoc\u002Fnuxt-4\u002Frouting-rendering","2.tu-hoc\u002F5.nuxt-4\u002F2.routing-rendering","i-lucide-route",{"title":373,"path":374,"stem":375,"icon":91},"3. Data và Server","\u002Ftu-hoc\u002Fnuxt-4\u002Fdata-server","2.tu-hoc\u002F5.nuxt-4\u002F3.data-server",{"title":307,"path":377,"stem":378,"icon":196},"\u002Ftu-hoc\u002Fnuxt-4\u002Fcau-hoi-phong-van","2.tu-hoc\u002F5.nuxt-4\u002F4.cau-hoi-phong-van",{"title":380,"path":381,"stem":382,"icon":383},"5. Practical Todo App","\u002Ftu-hoc\u002Fnuxt-4\u002Fpractical-todo-app","2.tu-hoc\u002F5.nuxt-4\u002F5.practical-todo-app","i-lucide-check-square",{"title":385,"path":386,"stem":387,"children":388,"icon":390},"Tailwind CSS","\u002Ftu-hoc\u002Ftailwindcss","2.tu-hoc\u002F6.tailwindcss\u002Findex",[389,391,396,401,406,411,416],{"title":385,"path":386,"stem":387,"icon":390},"i-simple-icons-tailwindcss",{"title":392,"path":393,"stem":394,"icon":395},"1. Layout & Spacing","\u002Ftu-hoc\u002Ftailwindcss\u002Flayout-spacing","2.tu-hoc\u002F6.tailwindcss\u002F1.layout-spacing","i-lucide-layout",{"title":397,"path":398,"stem":399,"icon":400},"2. Typography & Colors","\u002Ftu-hoc\u002Ftailwindcss\u002Ftypography-colors","2.tu-hoc\u002F6.tailwindcss\u002F2.typography-colors","i-lucide-type",{"title":402,"path":403,"stem":404,"icon":405},"3. Interactive & Effects","\u002Ftu-hoc\u002Ftailwindcss\u002Finteractive-effects","2.tu-hoc\u002F6.tailwindcss\u002F3.interactive-effects","i-lucide-sparkles",{"title":407,"path":408,"stem":409,"icon":410},"4. Responsive & Dark Mode","\u002Ftu-hoc\u002Ftailwindcss\u002Fresponsive-darkmode","2.tu-hoc\u002F6.tailwindcss\u002F4.responsive-darkmode","i-lucide-monitor-smartphone",{"title":412,"path":413,"stem":414,"icon":415},"5. Customization & Theme","\u002Ftu-hoc\u002Ftailwindcss\u002Fcustomization","2.tu-hoc\u002F6.tailwindcss\u002F5.customization","i-lucide-settings-2",{"title":417,"path":418,"stem":419,"icon":181},"6. Practical Projects","\u002Ftu-hoc\u002Ftailwindcss\u002Fpractical-projects","2.tu-hoc\u002F6.tailwindcss\u002F6.practical-projects",{"id":421,"title":422,"body":423,"description":2536,"extension":2537,"links":2538,"meta":2539,"navigation":2540,"path":94,"seo":2541,"stem":95,"__hash__":2542},"docs\u002F1.phong-van\u002F3.ngan-hang-cau-hoi\u002F5.dsa-coding.md","Ngân hàng DSA và Coding (C#)",{"type":424,"value":425,"toc":2476},"minimark",[426,431,444,448,453,472,485,550,556,562,566,571,576,619,624,628,633,676,680,684,689,723,727,731,765,770,775,779,784,789,837,841,845,860,865,898,903,907,911,935,939,943,982,987,995,999,1004,1056,1060,1064,1101,1105,1109,1168,1173,1177,1235,1240,1244,1248,1305,1310,1314,1319,1327,1380,1384,1437,1441,1470,1474,1532,1536,1540,1598,1602,1607,1654,1658,1663,1706,1710,1738,1742,1757,1761,1790,1794,1823,1827,1875,1879,1883,1930,1935,1939,1985,1989,2023,2027,2031,2064,2068,2073,2111,2115,2123,2168,2172,2206,2214,2229,2236,2265,2276,2300,2304,2338,2342,2385,2389,2393,2445,2449,2452,2456,2462,2465,2472],[427,428,430],"h2",{"id":429},"cách-dùng-phần-này","Cách dùng phần này",[432,433,434,435,439,440,443],"p",{},"Mỗi bài có ",[436,437,438],"strong",{},"đề → cách tiếp cận → code C# → Big O → follow-up interviewer hay hỏi",". Đừng đọc đáp án trước — ",[436,441,442],{},"tự code 15 phút"," rồi so sánh.",[427,445,447],{"id":446},"a-array","A. Array",[449,450,452],"h3",{"id":451},"_1-two-sum-lc-1","1. Two Sum — LC 1",[432,454,455,458,459,463,464,467,468,471],{},[436,456,457],{},"Đề",": Cho ",[460,461,462],"code",{},"int[] nums",", ",[460,465,466],{},"int target",". Trả về 2 index sao cho ",[460,469,470],{},"nums[i] + nums[j] == target",".",[432,473,474,477,478,481,482,471],{},[436,475,476],{},"Tiếp cận",": HashMap lưu ",[460,479,480],{},"value → index",". Lúc duyệt, tìm ",[460,483,484],{},"target - nums[i]",[486,487,492],"pre",{"className":488,"code":489,"language":490,"meta":491,"style":491},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","public int[] TwoSum(int[] nums, int target) {\n    var map = new Dictionary\u003Cint, int>();\n    for (int i = 0; i \u003C nums.Length; i++) {\n        int need = target - nums[i];\n        if (map.TryGetValue(need, out int j)) return new[] { j, i };\n        map[nums[i]] = i;\n    }\n    return Array.Empty\u003Cint>();\n}\n","csharp","",[460,493,494,502,508,514,520,526,532,538,544],{"__ignoreMap":491},[495,496,499],"span",{"class":497,"line":498},"line",1,[495,500,501],{},"public int[] TwoSum(int[] nums, int target) {\n",[495,503,505],{"class":497,"line":504},2,[495,506,507],{},"    var map = new Dictionary\u003Cint, int>();\n",[495,509,511],{"class":497,"line":510},3,[495,512,513],{},"    for (int i = 0; i \u003C nums.Length; i++) {\n",[495,515,517],{"class":497,"line":516},4,[495,518,519],{},"        int need = target - nums[i];\n",[495,521,523],{"class":497,"line":522},5,[495,524,525],{},"        if (map.TryGetValue(need, out int j)) return new[] { j, i };\n",[495,527,529],{"class":497,"line":528},6,[495,530,531],{},"        map[nums[i]] = i;\n",[495,533,535],{"class":497,"line":534},7,[495,536,537],{},"    }\n",[495,539,541],{"class":497,"line":540},8,[495,542,543],{},"    return Array.Empty\u003Cint>();\n",[495,545,547],{"class":497,"line":546},9,[495,548,549],{},"}\n",[432,551,552,555],{},[436,553,554],{},"Big O",": time O(n), space O(n).",[432,557,558,561],{},[436,559,560],{},"Follow-up",": nếu mảng đã sorted? → Two pointers, O(1) space.",[449,563,565],{"id":564},"_2-best-time-to-buy-and-sell-stock-lc-121","2. Best Time to Buy and Sell Stock — LC 121",[432,567,568,570],{},[436,569,457],{},": Mảng giá, mua 1 lần bán 1 lần, max profit.",[432,572,573,575],{},[436,574,476],{},": tracking min đã thấy + max profit.",[486,577,579],{"className":488,"code":578,"language":490,"meta":491,"style":491},"public int MaxProfit(int[] prices) {\n    int min = int.MaxValue, profit = 0;\n    foreach (var p in prices) {\n        min = Math.Min(min, p);\n        profit = Math.Max(profit, p - min);\n    }\n    return profit;\n}\n",[460,580,581,586,591,596,601,606,610,615],{"__ignoreMap":491},[495,582,583],{"class":497,"line":498},[495,584,585],{},"public int MaxProfit(int[] prices) {\n",[495,587,588],{"class":497,"line":504},[495,589,590],{},"    int min = int.MaxValue, profit = 0;\n",[495,592,593],{"class":497,"line":510},[495,594,595],{},"    foreach (var p in prices) {\n",[495,597,598],{"class":497,"line":516},[495,599,600],{},"        min = Math.Min(min, p);\n",[495,602,603],{"class":497,"line":522},[495,604,605],{},"        profit = Math.Max(profit, p - min);\n",[495,607,608],{"class":497,"line":528},[495,609,537],{},[495,611,612],{"class":497,"line":534},[495,613,614],{},"    return profit;\n",[495,616,617],{"class":497,"line":540},[495,618,549],{},[432,620,621,623],{},[436,622,554],{},": O(n) \u002F O(1).",[449,625,627],{"id":626},"_3-maximum-subarray-kadane-lc-53","3. Maximum Subarray (Kadane) — LC 53",[432,629,630,632],{},[436,631,457],{},": Tìm subarray contiguous có tổng lớn nhất.",[486,634,636],{"className":488,"code":635,"language":490,"meta":491,"style":491},"public int MaxSubArray(int[] nums) {\n    int cur = nums[0], best = nums[0];\n    for (int i = 1; i \u003C nums.Length; i++) {\n        cur = Math.Max(nums[i], cur + nums[i]);\n        best = Math.Max(best, cur);\n    }\n    return best;\n}\n",[460,637,638,643,648,653,658,663,667,672],{"__ignoreMap":491},[495,639,640],{"class":497,"line":498},[495,641,642],{},"public int MaxSubArray(int[] nums) {\n",[495,644,645],{"class":497,"line":504},[495,646,647],{},"    int cur = nums[0], best = nums[0];\n",[495,649,650],{"class":497,"line":510},[495,651,652],{},"    for (int i = 1; i \u003C nums.Length; i++) {\n",[495,654,655],{"class":497,"line":516},[495,656,657],{},"        cur = Math.Max(nums[i], cur + nums[i]);\n",[495,659,660],{"class":497,"line":522},[495,661,662],{},"        best = Math.Max(best, cur);\n",[495,664,665],{"class":497,"line":528},[495,666,537],{},[495,668,669],{"class":497,"line":534},[495,670,671],{},"    return best;\n",[495,673,674],{"class":497,"line":540},[495,675,549],{},[432,677,678,623],{},[436,679,554],{},[449,681,683],{"id":682},"_4-move-zeroes-lc-283","4. Move Zeroes — LC 283",[432,685,686,688],{},[436,687,457],{},": Di chuyển tất cả số 0 về cuối, giữ thứ tự số khác. In-place.",[486,690,692],{"className":488,"code":691,"language":490,"meta":491,"style":491},"public void MoveZeroes(int[] nums) {\n    int w = 0;\n    for (int i = 0; i \u003C nums.Length; i++)\n        if (nums[i] != 0) nums[w++] = nums[i];\n    while (w \u003C nums.Length) nums[w++] = 0;\n}\n",[460,693,694,699,704,709,714,719],{"__ignoreMap":491},[495,695,696],{"class":497,"line":498},[495,697,698],{},"public void MoveZeroes(int[] nums) {\n",[495,700,701],{"class":497,"line":504},[495,702,703],{},"    int w = 0;\n",[495,705,706],{"class":497,"line":510},[495,707,708],{},"    for (int i = 0; i \u003C nums.Length; i++)\n",[495,710,711],{"class":497,"line":516},[495,712,713],{},"        if (nums[i] != 0) nums[w++] = nums[i];\n",[495,715,716],{"class":497,"line":522},[495,717,718],{},"    while (w \u003C nums.Length) nums[w++] = 0;\n",[495,720,721],{"class":497,"line":528},[495,722,549],{},[432,724,725,623],{},[436,726,554],{},[449,728,730],{"id":729},"_5-contains-duplicate-lc-217","5. Contains Duplicate — LC 217",[486,732,734],{"className":488,"code":733,"language":490,"meta":491,"style":491},"public bool ContainsDuplicate(int[] nums) {\n    var set = new HashSet\u003Cint>();\n    foreach (var n in nums)\n        if (!set.Add(n)) return true;\n    return false;\n}\n",[460,735,736,741,746,751,756,761],{"__ignoreMap":491},[495,737,738],{"class":497,"line":498},[495,739,740],{},"public bool ContainsDuplicate(int[] nums) {\n",[495,742,743],{"class":497,"line":504},[495,744,745],{},"    var set = new HashSet\u003Cint>();\n",[495,747,748],{"class":497,"line":510},[495,749,750],{},"    foreach (var n in nums)\n",[495,752,753],{"class":497,"line":516},[495,754,755],{},"        if (!set.Add(n)) return true;\n",[495,757,758],{"class":497,"line":522},[495,759,760],{},"    return false;\n",[495,762,763],{"class":497,"line":528},[495,764,549],{},[432,766,767,769],{},[436,768,554],{},": O(n) avg \u002F O(n).",[432,771,772,774],{},[436,773,560],{},": nếu hạn chế memory? → sort + check adjacent, O(n log n) \u002F O(1).",[449,776,778],{"id":777},"_6-rotate-array-lc-189","6. Rotate Array — LC 189",[432,780,781,783],{},[436,782,457],{},": Xoay mảng phải k bước, in-place.",[432,785,786,788],{},[436,787,476],{},": reverse 3 lần.",[486,790,792],{"className":488,"code":791,"language":490,"meta":491,"style":491},"public void Rotate(int[] nums, int k) {\n    k %= nums.Length;\n    Reverse(nums, 0, nums.Length - 1);\n    Reverse(nums, 0, k - 1);\n    Reverse(nums, k, nums.Length - 1);\n}\nprivate void Reverse(int[] a, int l, int r) {\n    while (l \u003C r) { (a[l], a[r]) = (a[r], a[l]); l++; r--; }\n}\n",[460,793,794,799,804,809,814,819,823,828,833],{"__ignoreMap":491},[495,795,796],{"class":497,"line":498},[495,797,798],{},"public void Rotate(int[] nums, int k) {\n",[495,800,801],{"class":497,"line":504},[495,802,803],{},"    k %= nums.Length;\n",[495,805,806],{"class":497,"line":510},[495,807,808],{},"    Reverse(nums, 0, nums.Length - 1);\n",[495,810,811],{"class":497,"line":516},[495,812,813],{},"    Reverse(nums, 0, k - 1);\n",[495,815,816],{"class":497,"line":522},[495,817,818],{},"    Reverse(nums, k, nums.Length - 1);\n",[495,820,821],{"class":497,"line":528},[495,822,549],{},[495,824,825],{"class":497,"line":534},[495,826,827],{},"private void Reverse(int[] a, int l, int r) {\n",[495,829,830],{"class":497,"line":540},[495,831,832],{},"    while (l \u003C r) { (a[l], a[r]) = (a[r], a[l]); l++; r--; }\n",[495,834,835],{"class":497,"line":546},[495,836,549],{},[432,838,839,623],{},[436,840,554],{},[449,842,844],{"id":843},"_7-merge-two-sorted-arrays-lc-88","7. Merge Two Sorted Arrays — LC 88",[432,846,847,849,850,853,854,463,857,859],{},[436,848,457],{},": Merge ",[460,851,852],{},"nums2"," vào ",[460,855,856],{},"nums1",[460,858,856],{}," đủ chỗ.",[432,861,862,864],{},[436,863,476],{},": ghi từ cuối tránh ghi đè.",[486,866,868],{"className":488,"code":867,"language":490,"meta":491,"style":491},"public void Merge(int[] a, int m, int[] b, int n) {\n    int i = m - 1, j = n - 1, k = m + n - 1;\n    while (j >= 0) {\n        a[k--] = (i >= 0 && a[i] > b[j]) ? a[i--] : b[j--];\n    }\n}\n",[460,869,870,875,880,885,890,894],{"__ignoreMap":491},[495,871,872],{"class":497,"line":498},[495,873,874],{},"public void Merge(int[] a, int m, int[] b, int n) {\n",[495,876,877],{"class":497,"line":504},[495,878,879],{},"    int i = m - 1, j = n - 1, k = m + n - 1;\n",[495,881,882],{"class":497,"line":510},[495,883,884],{},"    while (j >= 0) {\n",[495,886,887],{"class":497,"line":516},[495,888,889],{},"        a[k--] = (i >= 0 && a[i] > b[j]) ? a[i--] : b[j--];\n",[495,891,892],{"class":497,"line":522},[495,893,537],{},[495,895,896],{"class":497,"line":528},[495,897,549],{},[432,899,900,902],{},[436,901,554],{},": O(m+n) \u002F O(1).",[427,904,906],{"id":905},"b-string","B. String",[449,908,910],{"id":909},"_8-reverse-a-string-lc-344","8. Reverse a String — LC 344",[486,912,914],{"className":488,"code":913,"language":490,"meta":491,"style":491},"public void ReverseString(char[] s) {\n    int l = 0, r = s.Length - 1;\n    while (l \u003C r) { (s[l], s[r]) = (s[r], s[l]); l++; r--; }\n}\n",[460,915,916,921,926,931],{"__ignoreMap":491},[495,917,918],{"class":497,"line":498},[495,919,920],{},"public void ReverseString(char[] s) {\n",[495,922,923],{"class":497,"line":504},[495,924,925],{},"    int l = 0, r = s.Length - 1;\n",[495,927,928],{"class":497,"line":510},[495,929,930],{},"    while (l \u003C r) { (s[l], s[r]) = (s[r], s[l]); l++; r--; }\n",[495,932,933],{"class":497,"line":516},[495,934,549],{},[432,936,937,623],{},[436,938,554],{},[449,940,942],{"id":941},"_9-valid-anagram-lc-242","9. Valid Anagram — LC 242",[486,944,946],{"className":488,"code":945,"language":490,"meta":491,"style":491},"public bool IsAnagram(string s, string t) {\n    if (s.Length != t.Length) return false;\n    var cnt = new int[26];\n    foreach (var c in s) cnt[c - 'a']++;\n    foreach (var c in t) if (--cnt[c - 'a'] \u003C 0) return false;\n    return true;\n}\n",[460,947,948,953,958,963,968,973,978],{"__ignoreMap":491},[495,949,950],{"class":497,"line":498},[495,951,952],{},"public bool IsAnagram(string s, string t) {\n",[495,954,955],{"class":497,"line":504},[495,956,957],{},"    if (s.Length != t.Length) return false;\n",[495,959,960],{"class":497,"line":510},[495,961,962],{},"    var cnt = new int[26];\n",[495,964,965],{"class":497,"line":516},[495,966,967],{},"    foreach (var c in s) cnt[c - 'a']++;\n",[495,969,970],{"class":497,"line":522},[495,971,972],{},"    foreach (var c in t) if (--cnt[c - 'a'] \u003C 0) return false;\n",[495,974,975],{"class":497,"line":528},[495,976,977],{},"    return true;\n",[495,979,980],{"class":497,"line":534},[495,981,549],{},[432,983,984,986],{},[436,985,554],{},": O(n) \u002F O(1) (alphabet cố định).",[432,988,989,991,992,471],{},[436,990,560],{},": nếu Unicode? → ",[460,993,994],{},"Dictionary\u003Cchar, int>",[449,996,998],{"id":997},"_10-valid-palindrome-lc-125","10. Valid Palindrome — LC 125",[432,1000,1001,1003],{},[436,1002,457],{},": Bỏ qua non-alphanumeric, không phân biệt hoa thường.",[486,1005,1007],{"className":488,"code":1006,"language":490,"meta":491,"style":491},"public bool IsPalindrome(string s) {\n    int l = 0, r = s.Length - 1;\n    while (l \u003C r) {\n        while (l \u003C r && !char.IsLetterOrDigit(s[l])) l++;\n        while (l \u003C r && !char.IsLetterOrDigit(s[r])) r--;\n        if (char.ToLower(s[l]) != char.ToLower(s[r])) return false;\n        l++; r--;\n    }\n    return true;\n}\n",[460,1008,1009,1014,1018,1023,1028,1033,1038,1043,1047,1051],{"__ignoreMap":491},[495,1010,1011],{"class":497,"line":498},[495,1012,1013],{},"public bool IsPalindrome(string s) {\n",[495,1015,1016],{"class":497,"line":504},[495,1017,925],{},[495,1019,1020],{"class":497,"line":510},[495,1021,1022],{},"    while (l \u003C r) {\n",[495,1024,1025],{"class":497,"line":516},[495,1026,1027],{},"        while (l \u003C r && !char.IsLetterOrDigit(s[l])) l++;\n",[495,1029,1030],{"class":497,"line":522},[495,1031,1032],{},"        while (l \u003C r && !char.IsLetterOrDigit(s[r])) r--;\n",[495,1034,1035],{"class":497,"line":528},[495,1036,1037],{},"        if (char.ToLower(s[l]) != char.ToLower(s[r])) return false;\n",[495,1039,1040],{"class":497,"line":534},[495,1041,1042],{},"        l++; r--;\n",[495,1044,1045],{"class":497,"line":540},[495,1046,537],{},[495,1048,1049],{"class":497,"line":546},[495,1050,977],{},[495,1052,1054],{"class":497,"line":1053},10,[495,1055,549],{},[432,1057,1058,623],{},[436,1059,554],{},[449,1061,1063],{"id":1062},"_11-first-unique-character-lc-387","11. First Unique Character — LC 387",[486,1065,1067],{"className":488,"code":1066,"language":490,"meta":491,"style":491},"public int FirstUniqChar(string s) {\n    var cnt = new int[26];\n    foreach (var c in s) cnt[c - 'a']++;\n    for (int i = 0; i \u003C s.Length; i++)\n        if (cnt[s[i] - 'a'] == 1) return i;\n    return -1;\n}\n",[460,1068,1069,1074,1078,1082,1087,1092,1097],{"__ignoreMap":491},[495,1070,1071],{"class":497,"line":498},[495,1072,1073],{},"public int FirstUniqChar(string s) {\n",[495,1075,1076],{"class":497,"line":504},[495,1077,962],{},[495,1079,1080],{"class":497,"line":510},[495,1081,967],{},[495,1083,1084],{"class":497,"line":516},[495,1085,1086],{},"    for (int i = 0; i \u003C s.Length; i++)\n",[495,1088,1089],{"class":497,"line":522},[495,1090,1091],{},"        if (cnt[s[i] - 'a'] == 1) return i;\n",[495,1093,1094],{"class":497,"line":528},[495,1095,1096],{},"    return -1;\n",[495,1098,1099],{"class":497,"line":534},[495,1100,549],{},[432,1102,1103,623],{},[436,1104,554],{},[449,1106,1108],{"id":1107},"_12-longest-common-prefix-lc-14","12. Longest Common Prefix — LC 14",[486,1110,1112],{"className":488,"code":1111,"language":490,"meta":491,"style":491},"public string LongestCommonPrefix(string[] strs) {\n    if (strs.Length == 0) return \"\";\n    var prefix = strs[0];\n    for (int i = 1; i \u003C strs.Length; i++) {\n        while (!strs[i].StartsWith(prefix)) {\n            prefix = prefix[..^1];\n            if (prefix == \"\") return \"\";\n        }\n    }\n    return prefix;\n}\n",[460,1113,1114,1119,1124,1129,1134,1139,1144,1149,1154,1158,1163],{"__ignoreMap":491},[495,1115,1116],{"class":497,"line":498},[495,1117,1118],{},"public string LongestCommonPrefix(string[] strs) {\n",[495,1120,1121],{"class":497,"line":504},[495,1122,1123],{},"    if (strs.Length == 0) return \"\";\n",[495,1125,1126],{"class":497,"line":510},[495,1127,1128],{},"    var prefix = strs[0];\n",[495,1130,1131],{"class":497,"line":516},[495,1132,1133],{},"    for (int i = 1; i \u003C strs.Length; i++) {\n",[495,1135,1136],{"class":497,"line":522},[495,1137,1138],{},"        while (!strs[i].StartsWith(prefix)) {\n",[495,1140,1141],{"class":497,"line":528},[495,1142,1143],{},"            prefix = prefix[..^1];\n",[495,1145,1146],{"class":497,"line":534},[495,1147,1148],{},"            if (prefix == \"\") return \"\";\n",[495,1150,1151],{"class":497,"line":540},[495,1152,1153],{},"        }\n",[495,1155,1156],{"class":497,"line":546},[495,1157,537],{},[495,1159,1160],{"class":497,"line":1053},[495,1161,1162],{},"    return prefix;\n",[495,1164,1166],{"class":497,"line":1165},11,[495,1167,549],{},[432,1169,1170,1172],{},[436,1171,554],{},": O(S) — S là tổng ký tự.",[449,1174,1176],{"id":1175},"_13-group-anagrams-lc-49","13. Group Anagrams — LC 49",[486,1178,1180],{"className":488,"code":1179,"language":490,"meta":491,"style":491},"public IList\u003CIList\u003Cstring>> GroupAnagrams(string[] strs) {\n    var map = new Dictionary\u003Cstring, List\u003Cstring>>();\n    foreach (var s in strs) {\n        var arr = s.ToCharArray();\n        Array.Sort(arr);\n        var key = new string(arr);\n        if (!map.ContainsKey(key)) map[key] = new();\n        map[key].Add(s);\n    }\n    return map.Values.Cast\u003CIList\u003Cstring>>().ToList();\n}\n",[460,1181,1182,1187,1192,1197,1202,1207,1212,1217,1222,1226,1231],{"__ignoreMap":491},[495,1183,1184],{"class":497,"line":498},[495,1185,1186],{},"public IList\u003CIList\u003Cstring>> GroupAnagrams(string[] strs) {\n",[495,1188,1189],{"class":497,"line":504},[495,1190,1191],{},"    var map = new Dictionary\u003Cstring, List\u003Cstring>>();\n",[495,1193,1194],{"class":497,"line":510},[495,1195,1196],{},"    foreach (var s in strs) {\n",[495,1198,1199],{"class":497,"line":516},[495,1200,1201],{},"        var arr = s.ToCharArray();\n",[495,1203,1204],{"class":497,"line":522},[495,1205,1206],{},"        Array.Sort(arr);\n",[495,1208,1209],{"class":497,"line":528},[495,1210,1211],{},"        var key = new string(arr);\n",[495,1213,1214],{"class":497,"line":534},[495,1215,1216],{},"        if (!map.ContainsKey(key)) map[key] = new();\n",[495,1218,1219],{"class":497,"line":540},[495,1220,1221],{},"        map[key].Add(s);\n",[495,1223,1224],{"class":497,"line":546},[495,1225,537],{},[495,1227,1228],{"class":497,"line":1053},[495,1229,1230],{},"    return map.Values.Cast\u003CIList\u003Cstring>>().ToList();\n",[495,1232,1233],{"class":497,"line":1165},[495,1234,549],{},[432,1236,1237,1239],{},[436,1238,554],{},": O(n * k log k) (k = max length).",[427,1241,1243],{"id":1242},"c-stack-queue","C. Stack & Queue",[449,1245,1247],{"id":1246},"_14-valid-parentheses-lc-20","14. Valid Parentheses — LC 20",[486,1249,1251],{"className":488,"code":1250,"language":490,"meta":491,"style":491},"public bool IsValid(string s) {\n    var st = new Stack\u003Cchar>();\n    var pair = new Dictionary\u003Cchar, char> { {')','('}, {']','['}, {'}','{'} };\n    foreach (var c in s) {\n        if (pair.ContainsValue(c)) st.Push(c);\n        else if (pair.TryGetValue(c, out char open)) {\n            if (st.Count == 0 || st.Pop() != open) return false;\n        }\n    }\n    return st.Count == 0;\n}\n",[460,1252,1253,1258,1263,1268,1273,1278,1283,1288,1292,1296,1301],{"__ignoreMap":491},[495,1254,1255],{"class":497,"line":498},[495,1256,1257],{},"public bool IsValid(string s) {\n",[495,1259,1260],{"class":497,"line":504},[495,1261,1262],{},"    var st = new Stack\u003Cchar>();\n",[495,1264,1265],{"class":497,"line":510},[495,1266,1267],{},"    var pair = new Dictionary\u003Cchar, char> { {')','('}, {']','['}, {'}','{'} };\n",[495,1269,1270],{"class":497,"line":516},[495,1271,1272],{},"    foreach (var c in s) {\n",[495,1274,1275],{"class":497,"line":522},[495,1276,1277],{},"        if (pair.ContainsValue(c)) st.Push(c);\n",[495,1279,1280],{"class":497,"line":528},[495,1281,1282],{},"        else if (pair.TryGetValue(c, out char open)) {\n",[495,1284,1285],{"class":497,"line":534},[495,1286,1287],{},"            if (st.Count == 0 || st.Pop() != open) return false;\n",[495,1289,1290],{"class":497,"line":540},[495,1291,1153],{},[495,1293,1294],{"class":497,"line":546},[495,1295,537],{},[495,1297,1298],{"class":497,"line":1053},[495,1299,1300],{},"    return st.Count == 0;\n",[495,1302,1303],{"class":497,"line":1165},[495,1304,549],{},[432,1306,1307,1309],{},[436,1308,554],{},": O(n) \u002F O(n).",[449,1311,1313],{"id":1312},"_15-min-stack-lc-155","15. Min Stack — LC 155",[432,1315,1316,1318],{},[436,1317,457],{},": Push\u002FPop\u002FTop\u002FGetMin đều O(1).",[432,1320,1321,1323,1324,471],{},[436,1322,476],{},": 2 stack, hoặc stack lưu pair ",[460,1325,1326],{},"(value, min-so-far)",[486,1328,1330],{"className":488,"code":1329,"language":490,"meta":491,"style":491},"public class MinStack {\n    private readonly Stack\u003C(int val, int min)> _st = new();\n    public void Push(int x) {\n        int m = _st.Count == 0 ? x : Math.Min(x, _st.Peek().min);\n        _st.Push((x, m));\n    }\n    public void Pop() => _st.Pop();\n    public int Top() => _st.Peek().val;\n    public int GetMin() => _st.Peek().min;\n}\n",[460,1331,1332,1337,1342,1347,1352,1357,1361,1366,1371,1376],{"__ignoreMap":491},[495,1333,1334],{"class":497,"line":498},[495,1335,1336],{},"public class MinStack {\n",[495,1338,1339],{"class":497,"line":504},[495,1340,1341],{},"    private readonly Stack\u003C(int val, int min)> _st = new();\n",[495,1343,1344],{"class":497,"line":510},[495,1345,1346],{},"    public void Push(int x) {\n",[495,1348,1349],{"class":497,"line":516},[495,1350,1351],{},"        int m = _st.Count == 0 ? x : Math.Min(x, _st.Peek().min);\n",[495,1353,1354],{"class":497,"line":522},[495,1355,1356],{},"        _st.Push((x, m));\n",[495,1358,1359],{"class":497,"line":528},[495,1360,537],{},[495,1362,1363],{"class":497,"line":534},[495,1364,1365],{},"    public void Pop() => _st.Pop();\n",[495,1367,1368],{"class":497,"line":540},[495,1369,1370],{},"    public int Top() => _st.Peek().val;\n",[495,1372,1373],{"class":497,"line":546},[495,1374,1375],{},"    public int GetMin() => _st.Peek().min;\n",[495,1377,1378],{"class":497,"line":1053},[495,1379,549],{},[449,1381,1383],{"id":1382},"_16-implement-queue-using-stacks-lc-232","16. Implement Queue using Stacks — LC 232",[486,1385,1387],{"className":488,"code":1386,"language":490,"meta":491,"style":491},"public class MyQueue {\n    private readonly Stack\u003Cint> _in = new(), _out = new();\n    public void Push(int x) => _in.Push(x);\n    public int Pop() { Peek(); return _out.Pop(); }\n    public int Peek() {\n        if (_out.Count == 0) while (_in.Count > 0) _out.Push(_in.Pop());\n        return _out.Peek();\n    }\n    public bool Empty() => _in.Count == 0 && _out.Count == 0;\n}\n",[460,1388,1389,1394,1399,1404,1409,1414,1419,1424,1428,1433],{"__ignoreMap":491},[495,1390,1391],{"class":497,"line":498},[495,1392,1393],{},"public class MyQueue {\n",[495,1395,1396],{"class":497,"line":504},[495,1397,1398],{},"    private readonly Stack\u003Cint> _in = new(), _out = new();\n",[495,1400,1401],{"class":497,"line":510},[495,1402,1403],{},"    public void Push(int x) => _in.Push(x);\n",[495,1405,1406],{"class":497,"line":516},[495,1407,1408],{},"    public int Pop() { Peek(); return _out.Pop(); }\n",[495,1410,1411],{"class":497,"line":522},[495,1412,1413],{},"    public int Peek() {\n",[495,1415,1416],{"class":497,"line":528},[495,1417,1418],{},"        if (_out.Count == 0) while (_in.Count > 0) _out.Push(_in.Pop());\n",[495,1420,1421],{"class":497,"line":534},[495,1422,1423],{},"        return _out.Peek();\n",[495,1425,1426],{"class":497,"line":540},[495,1427,537],{},[495,1429,1430],{"class":497,"line":546},[495,1431,1432],{},"    public bool Empty() => _in.Count == 0 && _out.Count == 0;\n",[495,1434,1435],{"class":497,"line":1053},[495,1436,549],{},[427,1438,1440],{"id":1439},"d-linked-list","D. Linked List",[486,1442,1444],{"className":488,"code":1443,"language":490,"meta":491,"style":491},"public class ListNode {\n    public int Val;\n    public ListNode? Next;\n    public ListNode(int v = 0, ListNode? n = null) { Val = v; Next = n; }\n}\n",[460,1445,1446,1451,1456,1461,1466],{"__ignoreMap":491},[495,1447,1448],{"class":497,"line":498},[495,1449,1450],{},"public class ListNode {\n",[495,1452,1453],{"class":497,"line":504},[495,1454,1455],{},"    public int Val;\n",[495,1457,1458],{"class":497,"line":510},[495,1459,1460],{},"    public ListNode? Next;\n",[495,1462,1463],{"class":497,"line":516},[495,1464,1465],{},"    public ListNode(int v = 0, ListNode? n = null) { Val = v; Next = n; }\n",[495,1467,1468],{"class":497,"line":522},[495,1469,549],{},[449,1471,1473],{"id":1472},"_17-reverse-linked-list-lc-206","17. Reverse Linked List — LC 206",[486,1475,1477],{"className":488,"code":1476,"language":490,"meta":491,"style":491},"public ListNode? ReverseList(ListNode? head) {\n    ListNode? prev = null;\n    var curr = head;\n    while (curr != null) {\n        var nxt = curr.Next;\n        curr.Next = prev;\n        prev = curr;\n        curr = nxt;\n    }\n    return prev;\n}\n",[460,1478,1479,1484,1489,1494,1499,1504,1509,1514,1519,1523,1528],{"__ignoreMap":491},[495,1480,1481],{"class":497,"line":498},[495,1482,1483],{},"public ListNode? ReverseList(ListNode? head) {\n",[495,1485,1486],{"class":497,"line":504},[495,1487,1488],{},"    ListNode? prev = null;\n",[495,1490,1491],{"class":497,"line":510},[495,1492,1493],{},"    var curr = head;\n",[495,1495,1496],{"class":497,"line":516},[495,1497,1498],{},"    while (curr != null) {\n",[495,1500,1501],{"class":497,"line":522},[495,1502,1503],{},"        var nxt = curr.Next;\n",[495,1505,1506],{"class":497,"line":528},[495,1507,1508],{},"        curr.Next = prev;\n",[495,1510,1511],{"class":497,"line":534},[495,1512,1513],{},"        prev = curr;\n",[495,1515,1516],{"class":497,"line":540},[495,1517,1518],{},"        curr = nxt;\n",[495,1520,1521],{"class":497,"line":546},[495,1522,537],{},[495,1524,1525],{"class":497,"line":1053},[495,1526,1527],{},"    return prev;\n",[495,1529,1530],{"class":497,"line":1165},[495,1531,549],{},[432,1533,1534,623],{},[436,1535,554],{},[449,1537,1539],{"id":1538},"_18-merge-two-sorted-lists-lc-21","18. Merge Two Sorted Lists — LC 21",[486,1541,1543],{"className":488,"code":1542,"language":490,"meta":491,"style":491},"public ListNode? MergeTwoLists(ListNode? a, ListNode? b) {\n    var dummy = new ListNode();\n    var tail = dummy;\n    while (a != null && b != null) {\n        if (a.Val \u003C= b.Val) { tail.Next = a; a = a.Next; }\n        else { tail.Next = b; b = b.Next; }\n        tail = tail.Next;\n    }\n    tail.Next = a ?? b;\n    return dummy.Next;\n}\n",[460,1544,1545,1550,1555,1560,1565,1570,1575,1580,1584,1589,1594],{"__ignoreMap":491},[495,1546,1547],{"class":497,"line":498},[495,1548,1549],{},"public ListNode? MergeTwoLists(ListNode? a, ListNode? b) {\n",[495,1551,1552],{"class":497,"line":504},[495,1553,1554],{},"    var dummy = new ListNode();\n",[495,1556,1557],{"class":497,"line":510},[495,1558,1559],{},"    var tail = dummy;\n",[495,1561,1562],{"class":497,"line":516},[495,1563,1564],{},"    while (a != null && b != null) {\n",[495,1566,1567],{"class":497,"line":522},[495,1568,1569],{},"        if (a.Val \u003C= b.Val) { tail.Next = a; a = a.Next; }\n",[495,1571,1572],{"class":497,"line":528},[495,1573,1574],{},"        else { tail.Next = b; b = b.Next; }\n",[495,1576,1577],{"class":497,"line":534},[495,1578,1579],{},"        tail = tail.Next;\n",[495,1581,1582],{"class":497,"line":540},[495,1583,537],{},[495,1585,1586],{"class":497,"line":546},[495,1587,1588],{},"    tail.Next = a ?? b;\n",[495,1590,1591],{"class":497,"line":1053},[495,1592,1593],{},"    return dummy.Next;\n",[495,1595,1596],{"class":497,"line":1165},[495,1597,549],{},[449,1599,1601],{"id":1600},"_19-linked-list-cycle-lc-141","19. Linked List Cycle — LC 141",[432,1603,1604,471],{},[436,1605,1606],{},"Floyd's tortoise & hare",[486,1608,1610],{"className":488,"code":1609,"language":490,"meta":491,"style":491},"public bool HasCycle(ListNode? head) {\n    var slow = head; var fast = head;\n    while (fast != null && fast.Next != null) {\n        slow = slow!.Next;\n        fast = fast.Next.Next;\n        if (slow == fast) return true;\n    }\n    return false;\n}\n",[460,1611,1612,1617,1622,1627,1632,1637,1642,1646,1650],{"__ignoreMap":491},[495,1613,1614],{"class":497,"line":498},[495,1615,1616],{},"public bool HasCycle(ListNode? head) {\n",[495,1618,1619],{"class":497,"line":504},[495,1620,1621],{},"    var slow = head; var fast = head;\n",[495,1623,1624],{"class":497,"line":510},[495,1625,1626],{},"    while (fast != null && fast.Next != null) {\n",[495,1628,1629],{"class":497,"line":516},[495,1630,1631],{},"        slow = slow!.Next;\n",[495,1633,1634],{"class":497,"line":522},[495,1635,1636],{},"        fast = fast.Next.Next;\n",[495,1638,1639],{"class":497,"line":528},[495,1640,1641],{},"        if (slow == fast) return true;\n",[495,1643,1644],{"class":497,"line":534},[495,1645,537],{},[495,1647,1648],{"class":497,"line":540},[495,1649,760],{},[495,1651,1652],{"class":497,"line":546},[495,1653,549],{},[449,1655,1657],{"id":1656},"_20-remove-nth-node-from-end-lc-19","20. Remove Nth Node From End — LC 19",[432,1659,1660,1662],{},[436,1661,476],{},": 2 pointers cách nhau N.",[486,1664,1666],{"className":488,"code":1665,"language":490,"meta":491,"style":491},"public ListNode? RemoveNthFromEnd(ListNode head, int n) {\n    var dummy = new ListNode(0, head);\n    var fast = dummy; var slow = dummy;\n    for (int i = 0; i \u003C n; i++) fast = fast.Next!;\n    while (fast.Next != null) { fast = fast.Next; slow = slow.Next!; }\n    slow.Next = slow.Next!.Next;\n    return dummy.Next;\n}\n",[460,1667,1668,1673,1678,1683,1688,1693,1698,1702],{"__ignoreMap":491},[495,1669,1670],{"class":497,"line":498},[495,1671,1672],{},"public ListNode? RemoveNthFromEnd(ListNode head, int n) {\n",[495,1674,1675],{"class":497,"line":504},[495,1676,1677],{},"    var dummy = new ListNode(0, head);\n",[495,1679,1680],{"class":497,"line":510},[495,1681,1682],{},"    var fast = dummy; var slow = dummy;\n",[495,1684,1685],{"class":497,"line":516},[495,1686,1687],{},"    for (int i = 0; i \u003C n; i++) fast = fast.Next!;\n",[495,1689,1690],{"class":497,"line":522},[495,1691,1692],{},"    while (fast.Next != null) { fast = fast.Next; slow = slow.Next!; }\n",[495,1694,1695],{"class":497,"line":528},[495,1696,1697],{},"    slow.Next = slow.Next!.Next;\n",[495,1699,1700],{"class":497,"line":534},[495,1701,1593],{},[495,1703,1704],{"class":497,"line":540},[495,1705,549],{},[427,1707,1709],{"id":1708},"e-tree-cơ-bản","E. Tree (cơ bản)",[486,1711,1713],{"className":488,"code":1712,"language":490,"meta":491,"style":491},"public class TreeNode {\n    public int Val;\n    public TreeNode? Left, Right;\n    public TreeNode(int v = 0) => Val = v;\n}\n",[460,1714,1715,1720,1724,1729,1734],{"__ignoreMap":491},[495,1716,1717],{"class":497,"line":498},[495,1718,1719],{},"public class TreeNode {\n",[495,1721,1722],{"class":497,"line":504},[495,1723,1455],{},[495,1725,1726],{"class":497,"line":510},[495,1727,1728],{},"    public TreeNode? Left, Right;\n",[495,1730,1731],{"class":497,"line":516},[495,1732,1733],{},"    public TreeNode(int v = 0) => Val = v;\n",[495,1735,1736],{"class":497,"line":522},[495,1737,549],{},[449,1739,1741],{"id":1740},"_21-max-depth-of-binary-tree-lc-104","21. Max Depth of Binary Tree — LC 104",[486,1743,1745],{"className":488,"code":1744,"language":490,"meta":491,"style":491},"public int MaxDepth(TreeNode? root) =>\n    root == null ? 0 : 1 + Math.Max(MaxDepth(root.Left), MaxDepth(root.Right));\n",[460,1746,1747,1752],{"__ignoreMap":491},[495,1748,1749],{"class":497,"line":498},[495,1750,1751],{},"public int MaxDepth(TreeNode? root) =>\n",[495,1753,1754],{"class":497,"line":504},[495,1755,1756],{},"    root == null ? 0 : 1 + Math.Max(MaxDepth(root.Left), MaxDepth(root.Right));\n",[449,1758,1760],{"id":1759},"_22-invert-binary-tree-lc-226","22. Invert Binary Tree — LC 226",[486,1762,1764],{"className":488,"code":1763,"language":490,"meta":491,"style":491},"public TreeNode? InvertTree(TreeNode? root) {\n    if (root == null) return null;\n    (root.Left, root.Right) = (InvertTree(root.Right), InvertTree(root.Left));\n    return root;\n}\n",[460,1765,1766,1771,1776,1781,1786],{"__ignoreMap":491},[495,1767,1768],{"class":497,"line":498},[495,1769,1770],{},"public TreeNode? InvertTree(TreeNode? root) {\n",[495,1772,1773],{"class":497,"line":504},[495,1774,1775],{},"    if (root == null) return null;\n",[495,1777,1778],{"class":497,"line":510},[495,1779,1780],{},"    (root.Left, root.Right) = (InvertTree(root.Right), InvertTree(root.Left));\n",[495,1782,1783],{"class":497,"line":516},[495,1784,1785],{},"    return root;\n",[495,1787,1788],{"class":497,"line":522},[495,1789,549],{},[449,1791,1793],{"id":1792},"_23-same-tree-lc-100","23. Same Tree — LC 100",[486,1795,1797],{"className":488,"code":1796,"language":490,"meta":491,"style":491},"public bool IsSameTree(TreeNode? a, TreeNode? b) {\n    if (a == null && b == null) return true;\n    if (a == null || b == null) return false;\n    return a.Val == b.Val && IsSameTree(a.Left, b.Left) && IsSameTree(a.Right, b.Right);\n}\n",[460,1798,1799,1804,1809,1814,1819],{"__ignoreMap":491},[495,1800,1801],{"class":497,"line":498},[495,1802,1803],{},"public bool IsSameTree(TreeNode? a, TreeNode? b) {\n",[495,1805,1806],{"class":497,"line":504},[495,1807,1808],{},"    if (a == null && b == null) return true;\n",[495,1810,1811],{"class":497,"line":510},[495,1812,1813],{},"    if (a == null || b == null) return false;\n",[495,1815,1816],{"class":497,"line":516},[495,1817,1818],{},"    return a.Val == b.Val && IsSameTree(a.Left, b.Left) && IsSameTree(a.Right, b.Right);\n",[495,1820,1821],{"class":497,"line":522},[495,1822,549],{},[449,1824,1826],{"id":1825},"_24-binary-tree-inorder-traversal-lc-94","24. Binary Tree Inorder Traversal — LC 94",[486,1828,1830],{"className":488,"code":1829,"language":490,"meta":491,"style":491},"public IList\u003Cint> InorderTraversal(TreeNode? root) {\n    var res = new List\u003Cint>();\n    void Go(TreeNode? n) {\n        if (n == null) return;\n        Go(n.Left); res.Add(n.Val); Go(n.Right);\n    }\n    Go(root);\n    return res;\n}\n",[460,1831,1832,1837,1842,1847,1852,1857,1861,1866,1871],{"__ignoreMap":491},[495,1833,1834],{"class":497,"line":498},[495,1835,1836],{},"public IList\u003Cint> InorderTraversal(TreeNode? root) {\n",[495,1838,1839],{"class":497,"line":504},[495,1840,1841],{},"    var res = new List\u003Cint>();\n",[495,1843,1844],{"class":497,"line":510},[495,1845,1846],{},"    void Go(TreeNode? n) {\n",[495,1848,1849],{"class":497,"line":516},[495,1850,1851],{},"        if (n == null) return;\n",[495,1853,1854],{"class":497,"line":522},[495,1855,1856],{},"        Go(n.Left); res.Add(n.Val); Go(n.Right);\n",[495,1858,1859],{"class":497,"line":528},[495,1860,537],{},[495,1862,1863],{"class":497,"line":534},[495,1864,1865],{},"    Go(root);\n",[495,1867,1868],{"class":497,"line":540},[495,1869,1870],{},"    return res;\n",[495,1872,1873],{"class":497,"line":546},[495,1874,549],{},[427,1876,1878],{"id":1877},"f-search-dp-cơ-bản","F. Search & DP cơ bản",[449,1880,1882],{"id":1881},"_25-binary-search-lc-704","25. Binary Search — LC 704",[486,1884,1886],{"className":488,"code":1885,"language":490,"meta":491,"style":491},"public int Search(int[] nums, int target) {\n    int l = 0, r = nums.Length - 1;\n    while (l \u003C= r) {\n        int m = l + (r - l) \u002F 2;\n        if (nums[m] == target) return m;\n        if (nums[m] \u003C target) l = m + 1; else r = m - 1;\n    }\n    return -1;\n}\n",[460,1887,1888,1893,1898,1903,1908,1913,1918,1922,1926],{"__ignoreMap":491},[495,1889,1890],{"class":497,"line":498},[495,1891,1892],{},"public int Search(int[] nums, int target) {\n",[495,1894,1895],{"class":497,"line":504},[495,1896,1897],{},"    int l = 0, r = nums.Length - 1;\n",[495,1899,1900],{"class":497,"line":510},[495,1901,1902],{},"    while (l \u003C= r) {\n",[495,1904,1905],{"class":497,"line":516},[495,1906,1907],{},"        int m = l + (r - l) \u002F 2;\n",[495,1909,1910],{"class":497,"line":522},[495,1911,1912],{},"        if (nums[m] == target) return m;\n",[495,1914,1915],{"class":497,"line":528},[495,1916,1917],{},"        if (nums[m] \u003C target) l = m + 1; else r = m - 1;\n",[495,1919,1920],{"class":497,"line":534},[495,1921,537],{},[495,1923,1924],{"class":497,"line":540},[495,1925,1096],{},[495,1927,1928],{"class":497,"line":546},[495,1929,549],{},[432,1931,1932,1934],{},[436,1933,554],{},": O(log n).",[449,1936,1938],{"id":1937},"_26-first-bad-version-lc-278","26. First Bad Version — LC 278",[486,1940,1942],{"className":488,"code":1941,"language":490,"meta":491,"style":491},"public int FirstBadVersion(int n) {\n    int l = 1, r = n;\n    while (l \u003C r) {\n        int m = l + (r - l) \u002F 2;\n        if (IsBadVersion(m)) r = m;\n        else l = m + 1;\n    }\n    return l;\n}\n",[460,1943,1944,1949,1954,1958,1962,1967,1972,1976,1981],{"__ignoreMap":491},[495,1945,1946],{"class":497,"line":498},[495,1947,1948],{},"public int FirstBadVersion(int n) {\n",[495,1950,1951],{"class":497,"line":504},[495,1952,1953],{},"    int l = 1, r = n;\n",[495,1955,1956],{"class":497,"line":510},[495,1957,1022],{},[495,1959,1960],{"class":497,"line":516},[495,1961,1907],{},[495,1963,1964],{"class":497,"line":522},[495,1965,1966],{},"        if (IsBadVersion(m)) r = m;\n",[495,1968,1969],{"class":497,"line":528},[495,1970,1971],{},"        else l = m + 1;\n",[495,1973,1974],{"class":497,"line":534},[495,1975,537],{},[495,1977,1978],{"class":497,"line":540},[495,1979,1980],{},"    return l;\n",[495,1982,1983],{"class":497,"line":546},[495,1984,549],{},[449,1986,1988],{"id":1987},"_27-climbing-stairs-lc-70","27. Climbing Stairs — LC 70",[486,1990,1992],{"className":488,"code":1991,"language":490,"meta":491,"style":491},"public int ClimbStairs(int n) {\n    if (n \u003C= 2) return n;\n    int a = 1, b = 2;\n    for (int i = 3; i \u003C= n; i++) (a, b) = (b, a + b);\n    return b;\n}\n",[460,1993,1994,1999,2004,2009,2014,2019],{"__ignoreMap":491},[495,1995,1996],{"class":497,"line":498},[495,1997,1998],{},"public int ClimbStairs(int n) {\n",[495,2000,2001],{"class":497,"line":504},[495,2002,2003],{},"    if (n \u003C= 2) return n;\n",[495,2005,2006],{"class":497,"line":510},[495,2007,2008],{},"    int a = 1, b = 2;\n",[495,2010,2011],{"class":497,"line":516},[495,2012,2013],{},"    for (int i = 3; i \u003C= n; i++) (a, b) = (b, a + b);\n",[495,2015,2016],{"class":497,"line":522},[495,2017,2018],{},"    return b;\n",[495,2020,2021],{"class":497,"line":528},[495,2022,549],{},[432,2024,2025,623],{},[436,2026,554],{},[449,2028,2030],{"id":2029},"_28-fibonacci-lc-509","28. Fibonacci — LC 509",[486,2032,2034],{"className":488,"code":2033,"language":490,"meta":491,"style":491},"public int Fib(int n) {\n    if (n \u003C= 1) return n;\n    int a = 0, b = 1;\n    for (int i = 2; i \u003C= n; i++) (a, b) = (b, a + b);\n    return b;\n}\n",[460,2035,2036,2041,2046,2051,2056,2060],{"__ignoreMap":491},[495,2037,2038],{"class":497,"line":498},[495,2039,2040],{},"public int Fib(int n) {\n",[495,2042,2043],{"class":497,"line":504},[495,2044,2045],{},"    if (n \u003C= 1) return n;\n",[495,2047,2048],{"class":497,"line":510},[495,2049,2050],{},"    int a = 0, b = 1;\n",[495,2052,2053],{"class":497,"line":516},[495,2054,2055],{},"    for (int i = 2; i \u003C= n; i++) (a, b) = (b, a + b);\n",[495,2057,2058],{"class":497,"line":522},[495,2059,2018],{},[495,2061,2062],{"class":497,"line":528},[495,2063,549],{},[449,2065,2067],{"id":2066},"_29-house-robber-lc-198","29. House Robber — LC 198",[432,2069,2070,2072],{},[436,2071,457],{},": chọn tập không kề nhau, tổng lớn nhất.",[486,2074,2076],{"className":488,"code":2075,"language":490,"meta":491,"style":491},"public int Rob(int[] nums) {\n    int prev = 0, curr = 0;\n    foreach (var n in nums) {\n        (prev, curr) = (curr, Math.Max(curr, prev + n));\n    }\n    return curr;\n}\n",[460,2077,2078,2083,2088,2093,2098,2102,2107],{"__ignoreMap":491},[495,2079,2080],{"class":497,"line":498},[495,2081,2082],{},"public int Rob(int[] nums) {\n",[495,2084,2085],{"class":497,"line":504},[495,2086,2087],{},"    int prev = 0, curr = 0;\n",[495,2089,2090],{"class":497,"line":510},[495,2091,2092],{},"    foreach (var n in nums) {\n",[495,2094,2095],{"class":497,"line":516},[495,2096,2097],{},"        (prev, curr) = (curr, Math.Max(curr, prev + n));\n",[495,2099,2100],{"class":497,"line":522},[495,2101,537],{},[495,2103,2104],{"class":497,"line":528},[495,2105,2106],{},"    return curr;\n",[495,2108,2109],{"class":497,"line":534},[495,2110,549],{},[427,2112,2114],{"id":2113},"g-c-linq-scenario","G. C# \u002F LINQ scenario",[449,2116,2118,2119,2122],{"id":2117},"_30-cho-listorder-tính-tổng-doanh-thu-mỗi-tháng-linq","30. Cho ",[460,2120,2121],{},"List\u003COrder>",", tính tổng doanh thu mỗi tháng — LINQ?",[486,2124,2126],{"className":488,"code":2125,"language":490,"meta":491,"style":491},"var monthly = orders\n    .GroupBy(o => new { o.Date.Year, o.Date.Month })\n    .Select(g => new {\n        g.Key.Year, g.Key.Month,\n        Total = g.Sum(o => o.Amount)\n    })\n    .OrderBy(x => x.Year).ThenBy(x => x.Month)\n    .ToList();\n",[460,2127,2128,2133,2138,2143,2148,2153,2158,2163],{"__ignoreMap":491},[495,2129,2130],{"class":497,"line":498},[495,2131,2132],{},"var monthly = orders\n",[495,2134,2135],{"class":497,"line":504},[495,2136,2137],{},"    .GroupBy(o => new { o.Date.Year, o.Date.Month })\n",[495,2139,2140],{"class":497,"line":510},[495,2141,2142],{},"    .Select(g => new {\n",[495,2144,2145],{"class":497,"line":516},[495,2146,2147],{},"        g.Key.Year, g.Key.Month,\n",[495,2149,2150],{"class":497,"line":522},[495,2151,2152],{},"        Total = g.Sum(o => o.Amount)\n",[495,2154,2155],{"class":497,"line":528},[495,2156,2157],{},"    })\n",[495,2159,2160],{"class":497,"line":534},[495,2161,2162],{},"    .OrderBy(x => x.Year).ThenBy(x => x.Month)\n",[495,2164,2165],{"class":497,"line":540},[495,2166,2167],{},"    .ToList();\n",[449,2169,2171],{"id":2170},"_31-tìm-3-user-có-nhiều-đơn-nhất","31. Tìm 3 user có nhiều đơn nhất",[486,2173,2175],{"className":488,"code":2174,"language":490,"meta":491,"style":491},"var top3 = orders\n    .GroupBy(o => o.UserId)\n    .Select(g => new { UserId = g.Key, Count = g.Count() })\n    .OrderByDescending(x => x.Count)\n    .Take(3)\n    .ToList();\n",[460,2176,2177,2182,2187,2192,2197,2202],{"__ignoreMap":491},[495,2178,2179],{"class":497,"line":498},[495,2180,2181],{},"var top3 = orders\n",[495,2183,2184],{"class":497,"line":504},[495,2185,2186],{},"    .GroupBy(o => o.UserId)\n",[495,2188,2189],{"class":497,"line":510},[495,2190,2191],{},"    .Select(g => new { UserId = g.Key, Count = g.Count() })\n",[495,2193,2194],{"class":497,"line":516},[495,2195,2196],{},"    .OrderByDescending(x => x.Count)\n",[495,2198,2199],{"class":497,"line":522},[495,2200,2201],{},"    .Take(3)\n",[495,2203,2204],{"class":497,"line":528},[495,2205,2167],{},[449,2207,2209,2210,2213],{"id":2208},"_32-cho-int-in-ra-phần-tử-xuất-hiện-nhiều-nhất","32. Cho ",[460,2211,2212],{},"int[]",", in ra phần tử xuất hiện nhiều nhất",[486,2215,2217],{"className":488,"code":2216,"language":490,"meta":491,"style":491},"public int MostFrequent(int[] arr) =>\n    arr.GroupBy(x => x).OrderByDescending(g => g.Count()).First().Key;\n",[460,2218,2219,2224],{"__ignoreMap":491},[495,2220,2221],{"class":497,"line":498},[495,2222,2223],{},"public int MostFrequent(int[] arr) =>\n",[495,2225,2226],{"class":497,"line":504},[495,2227,2228],{},"    arr.GroupBy(x => x).OrderByDescending(g => g.Count()).First().Key;\n",[432,2230,2231,2232,2235],{},"Hoặc dùng ",[460,2233,2234],{},"Dictionary"," cho hiệu năng tốt hơn dữ liệu lớn:",[486,2237,2239],{"className":488,"code":2238,"language":490,"meta":491,"style":491},"public int MostFrequent(int[] arr) {\n    var d = new Dictionary\u003Cint, int>();\n    foreach (var x in arr) d[x] = d.GetValueOrDefault(x) + 1;\n    return d.OrderByDescending(kv => kv.Value).First().Key;\n}\n",[460,2240,2241,2246,2251,2256,2261],{"__ignoreMap":491},[495,2242,2243],{"class":497,"line":498},[495,2244,2245],{},"public int MostFrequent(int[] arr) {\n",[495,2247,2248],{"class":497,"line":504},[495,2249,2250],{},"    var d = new Dictionary\u003Cint, int>();\n",[495,2252,2253],{"class":497,"line":510},[495,2254,2255],{},"    foreach (var x in arr) d[x] = d.GetValueOrDefault(x) + 1;\n",[495,2257,2258],{"class":497,"line":516},[495,2259,2260],{},"    return d.OrderByDescending(kv => kv.Value).First().Key;\n",[495,2262,2263],{"class":497,"line":522},[495,2264,549],{},[449,2266,2268,2269,2272,2273],{"id":2267},"_33-viết-extension-method-isnulloremptyt-cho-ienumerablet","33. Viết extension method ",[460,2270,2271],{},"IsNullOrEmpty\u003CT>"," cho ",[460,2274,2275],{},"IEnumerable\u003CT>",[486,2277,2279],{"className":488,"code":2278,"language":490,"meta":491,"style":491},"public static class EnumerableExt {\n    public static bool IsNullOrEmpty\u003CT>(this IEnumerable\u003CT>? src) =>\n        src == null || !src.Any();\n}\n",[460,2280,2281,2286,2291,2296],{"__ignoreMap":491},[495,2282,2283],{"class":497,"line":498},[495,2284,2285],{},"public static class EnumerableExt {\n",[495,2287,2288],{"class":497,"line":504},[495,2289,2290],{},"    public static bool IsNullOrEmpty\u003CT>(this IEnumerable\u003CT>? src) =>\n",[495,2292,2293],{"class":497,"line":510},[495,2294,2295],{},"        src == null || !src.Any();\n",[495,2297,2298],{"class":497,"line":516},[495,2299,549],{},[449,2301,2303],{"id":2302},"_34-implement-singleton-thread-safe","34. Implement Singleton thread-safe",[486,2305,2307],{"className":488,"code":2306,"language":490,"meta":491,"style":491},"public sealed class Logger {\n    private static readonly Lazy\u003CLogger> _instance = new(() => new Logger());\n    public static Logger Instance => _instance.Value;\n    private Logger() {}\n    public void Log(string m) {}\n}\n",[460,2308,2309,2314,2319,2324,2329,2334],{"__ignoreMap":491},[495,2310,2311],{"class":497,"line":498},[495,2312,2313],{},"public sealed class Logger {\n",[495,2315,2316],{"class":497,"line":504},[495,2317,2318],{},"    private static readonly Lazy\u003CLogger> _instance = new(() => new Logger());\n",[495,2320,2321],{"class":497,"line":510},[495,2322,2323],{},"    public static Logger Instance => _instance.Value;\n",[495,2325,2326],{"class":497,"line":516},[495,2327,2328],{},"    private Logger() {}\n",[495,2330,2331],{"class":497,"line":522},[495,2332,2333],{},"    public void Log(string m) {}\n",[495,2335,2336],{"class":497,"line":528},[495,2337,549],{},[449,2339,2341],{"id":2340},"_35-viết-retry-async-helper","35. Viết retry async helper",[486,2343,2345],{"className":488,"code":2344,"language":490,"meta":491,"style":491},"public static async Task\u003CT> RetryAsync\u003CT>(\n    Func\u003CTask\u003CT>> action, int times = 3, int delayMs = 500) {\n    for (int i = 0; i \u003C times; i++) {\n        try { return await action(); }\n        catch when (i \u003C times - 1) { await Task.Delay(delayMs); }\n    }\n    throw new InvalidOperationException();\n}\n",[460,2346,2347,2352,2357,2362,2367,2372,2376,2381],{"__ignoreMap":491},[495,2348,2349],{"class":497,"line":498},[495,2350,2351],{},"public static async Task\u003CT> RetryAsync\u003CT>(\n",[495,2353,2354],{"class":497,"line":504},[495,2355,2356],{},"    Func\u003CTask\u003CT>> action, int times = 3, int delayMs = 500) {\n",[495,2358,2359],{"class":497,"line":510},[495,2360,2361],{},"    for (int i = 0; i \u003C times; i++) {\n",[495,2363,2364],{"class":497,"line":516},[495,2365,2366],{},"        try { return await action(); }\n",[495,2368,2369],{"class":497,"line":522},[495,2370,2371],{},"        catch when (i \u003C times - 1) { await Task.Delay(delayMs); }\n",[495,2373,2374],{"class":497,"line":528},[495,2375,537],{},[495,2377,2378],{"class":497,"line":534},[495,2379,2380],{},"    throw new InvalidOperationException();\n",[495,2382,2383],{"class":497,"line":540},[495,2384,549],{},[427,2386,2388],{"id":2387},"h-hỏi-nhanh-phân-tích-big-o","H. Hỏi nhanh phân tích Big O",[449,2390,2392],{"id":2391},"_36-big-o-của-các-thao-tác-phổ-biến","36. Big O của các thao tác phổ biến",[2394,2395,2396,2404,2410,2416,2422,2428,2439,2442],"ul",{},[2397,2398,2399,2400,2403],"li",{},"Truy cập ",[460,2401,2402],{},"arr[i]",": O(1)",[2397,2405,2406,2409],{},[460,2407,2408],{},"List\u003CT>.Add"," cuối: O(1) amortized",[2397,2411,2412,2415],{},[460,2413,2414],{},"List\u003CT>.Insert(0, x)",": O(n)",[2397,2417,2418,2421],{},[460,2419,2420],{},"Dictionary.TryGetValue",": O(1) avg, O(n) worst (collision)",[2397,2423,2424,2427],{},[460,2425,2426],{},"HashSet.Contains",": O(1) avg",[2397,2429,2430,2431,2434,2435,2438],{},"Sort ",[460,2432,2433],{},"Array.Sort"," \u002F ",[460,2436,2437],{},"OrderBy",": O(n log n)",[2397,2440,2441],{},"Binary search trên mảng sorted: O(log n)",[2397,2443,2444],{},"BFS\u002FDFS trên đồ thị (V + E): O(V + E)",[449,2446,2448],{"id":2447},"_37-tại-sao-quicksort-có-thể-tệ-on","37. Tại sao QuickSort có thể tệ O(n²)?",[432,2450,2451],{},"Khi pivot luôn là min hoặc max (mảng đã sorted, mọi phần tử bằng nhau). Khắc phục: random pivot, median-of-three.",[449,2453,2455],{"id":2454},"_38-mergesort-có-in-place-không","38. MergeSort có in-place không?",[432,2457,2458,2461],{},[436,2459,2460],{},"Không."," Cần O(n) extra space cho mảng tạm. Nếu cần O(1) → dùng QuickSort hoặc HeapSort.",[2463,2464],"hr",{},[432,2466,2467,2468],{},"➡️ Tiếp theo: ",[2469,2470,2471],"a",{"href":99},"Câu hỏi HR & Soft skill",[2473,2474,2475],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":491,"searchDepth":504,"depth":504,"links":2477},[2478,2479,2488,2496,2501,2507,2513,2520,2531],{"id":429,"depth":504,"text":430},{"id":446,"depth":504,"text":447,"children":2480},[2481,2482,2483,2484,2485,2486,2487],{"id":451,"depth":510,"text":452},{"id":564,"depth":510,"text":565},{"id":626,"depth":510,"text":627},{"id":682,"depth":510,"text":683},{"id":729,"depth":510,"text":730},{"id":777,"depth":510,"text":778},{"id":843,"depth":510,"text":844},{"id":905,"depth":504,"text":906,"children":2489},[2490,2491,2492,2493,2494,2495],{"id":909,"depth":510,"text":910},{"id":941,"depth":510,"text":942},{"id":997,"depth":510,"text":998},{"id":1062,"depth":510,"text":1063},{"id":1107,"depth":510,"text":1108},{"id":1175,"depth":510,"text":1176},{"id":1242,"depth":504,"text":1243,"children":2497},[2498,2499,2500],{"id":1246,"depth":510,"text":1247},{"id":1312,"depth":510,"text":1313},{"id":1382,"depth":510,"text":1383},{"id":1439,"depth":504,"text":1440,"children":2502},[2503,2504,2505,2506],{"id":1472,"depth":510,"text":1473},{"id":1538,"depth":510,"text":1539},{"id":1600,"depth":510,"text":1601},{"id":1656,"depth":510,"text":1657},{"id":1708,"depth":504,"text":1709,"children":2508},[2509,2510,2511,2512],{"id":1740,"depth":510,"text":1741},{"id":1759,"depth":510,"text":1760},{"id":1792,"depth":510,"text":1793},{"id":1825,"depth":510,"text":1826},{"id":1877,"depth":504,"text":1878,"children":2514},[2515,2516,2517,2518,2519],{"id":1881,"depth":510,"text":1882},{"id":1937,"depth":510,"text":1938},{"id":1987,"depth":510,"text":1988},{"id":2029,"depth":510,"text":2030},{"id":2066,"depth":510,"text":2067},{"id":2113,"depth":504,"text":2114,"children":2521},[2522,2524,2525,2527,2529,2530],{"id":2117,"depth":510,"text":2523},"30. Cho List\u003COrder>, tính tổng doanh thu mỗi tháng — LINQ?",{"id":2170,"depth":510,"text":2171},{"id":2208,"depth":510,"text":2526},"32. Cho int[], in ra phần tử xuất hiện nhiều nhất",{"id":2267,"depth":510,"text":2528},"33. Viết extension method IsNullOrEmpty\u003CT> cho IEnumerable\u003CT>",{"id":2302,"depth":510,"text":2303},{"id":2340,"depth":510,"text":2341},{"id":2387,"depth":504,"text":2388,"children":2532},[2533,2534,2535],{"id":2391,"depth":510,"text":2392},{"id":2447,"depth":510,"text":2448},{"id":2454,"depth":510,"text":2455},"30+ bài coding interview hay gặp với fresher .NET — giải bằng C#, kèm Big O và follow-up.","md",null,{},{"title":93,"icon":96},{"title":422,"description":2536},"zjskVEz-lvXgsVlw9WuOIoaiWv62CmtkRV_BJ5XcM9Q",[2544,2546],{"title":88,"path":89,"stem":90,"description":2545,"icon":91,"children":-1},"50+ câu hỏi ASP.NET Core, Web API, Middleware, DI, EF Core, JWT cho fresher\u002Fjunior .NET.",{"title":98,"path":99,"stem":100,"description":2547,"icon":101,"children":-1},"25+ câu hỏi HR\u002Fbehavioral hay gặp khi phỏng vấn fresher .NET — kèm gợi ý cách trả lời.",1783490355174]