แนะนำให้อ่านออนไลน์ (การเข้าถึง Github ในประเทศมักไม่เสถียร)
การซิงโครไนซ์ Gitee ที่แนะนำ
- บทนำ : โปรเจ็กต์นี้เป็นชุดแผนการทดสอบที่สมบูรณ์ ออกแบบมาเพื่อช่วยให้ทุกคนหลีกเลี่ยงการออกนอกเส้นทาง เรียนรู้อัลกอริทึมทีละขั้นตอน และติดตามผู้เขียน
- เผยแพร่อย่างเป็นทางการ : "Code Thoughts"
- เวอร์ชัน PDF : เวอร์ชัน PDF ของ "Code Random Notes" บนอัลกอริทึม
- คลาสอัลกอริธึมแบบเปิด : คลาสอัลกอริธึมวิดีโอแบบเปิด "รหัสสุ่มบันทึก"
- เรียงความแปดส่วนที่แข็งแกร่งที่สุด : ความคิดแบบสุ่มเกี่ยวกับโค้ดที่บันทึกสาระสำคัญของโลกแห่งความรู้ PDF
- ลำดับการตอบคำถาม : README ได้จัดลำดับการตอบคำถามไว้แล้ว
- ชุมชนการเรียนรู้ : เรียนรู้ร่วมกันเกี่ยวกับการเช็คอิน/ทักษะการสัมภาษณ์/วิธีเลือกข้อเสนอ/คำแนะนำจากบริษัทขนาดใหญ่/กฎของสถานที่ทำงาน/การปรับเปลี่ยนประวัติการทำงาน/การแบ่งปันเทคโนโลยี/ชีวิตของโปรแกรม ยินดีต้อนรับสู่โลกแห่งความรู้ "Code Caprice"
- ส่งโค้ด : โปรเจ็กต์นี้ใช้ภาษา C++ ในการอธิบาย แต่มีเวอร์ชันหลายภาษาอยู่แล้ว เช่น Java, Python, Go, JavaScript ฯลฯ ขอขอบคุณผู้ร่วมให้ข้อมูลทุกคนที่นี่ หากคุณต้องการร่วมสนับสนุนโค้ดเพื่อทำให้อวตารของคุณสว่างขึ้น คลิกเรียนรู้วิธีส่งรหัสของคุณที่นี่
- หมายเหตุสำหรับการพิมพ์ซ้ำ : บทความต่อไปนี้ทั้งหมดเป็นผลงานต้นฉบับของฉัน (โปรแกรมเมอร์คาร์ล) โปรดระบุแหล่งที่มาเมื่ออ้างอิงบทความจากโครงการนี้ หากคุณพบว่ามีการลอกเลียนแบบหรือถ่ายโอนที่เป็นอันตราย คุณจะต้องใช้อาวุธทางกฎหมายเพื่อปกป้องสิทธิ์และผลประโยชน์ของคุณ ให้เรารักษาสภาพแวดล้อมการสร้างสรรค์ทางเทคนิคที่ดีไว้ด้วยกัน!
คู่มือการแปรงคำถาม LeetCode
ความเป็นมาของคู่มือการแปรงคำถาม
นักเรียนหลายคนที่เพิ่งเริ่มตอบคำถามมีความสับสน: ต้องเผชิญกับคำถามเกือบ 2,000 ข้อใน leetcode ว่าจะเริ่มต้นจากตรงไหน
ทุกคนรู้สึกว่าประสิทธิภาพในการตอบคำถามไม่มีประสิทธิภาพ และเสียเวลาไปกับ 3 ประเด็นหลัก:
- ค้นหาคำถาม
- พบคำถามที่ไม่ควรทำในขั้นตอนนี้
- ไม่มีชุดวิธีแก้ปัญหาคุณภาพสูงที่สมบูรณ์สำหรับการอ้างอิง
จริงๆ แล้ว ฉันได้ตอบคำถามนี้ไปแล้วใน Zhihu คำตอบก็ประมาณนี้: array-> linked list-> hash table-> string-> stack and Queue-> tree-> backtracking-> greedy-> Dynamic Programming - > ทฤษฎีกราฟ -> โครงสร้างข้อมูลขั้นสูง จากนั้นเริ่มต้นด้วยคำถามง่ายๆ และหลังจากตอบคำถามสองสามประเภทแล้ว ก็ค่อยๆ เข้าสู่คำถามระดับกลางและยาก
แต่ฉันสามารถเข้าใจตัวเองและรู้สึกว่า: แม้จะมีแผนโดยรวม แต่ก็เป็นเรื่องยากมากสำหรับผู้เริ่มต้นหรือแม้แต่ผู้มีประสบการณ์ด้านอัลกอริทึมที่จะค้นหาหัวข้อที่เหมาะกับเขา ค่าใช้จ่ายด้านเวลานั้นสูงมาก และหัวข้อนั้นก็ไม่เป็นเช่นนั้น จำเป็นต้องมีหัวข้อคลาสสิก
เมื่อพูดถึงการตอบคำถาม เราทุกคนต้องการใช้เวลาที่สั้นที่สุด ในการทำคำถามคลาสสิกทั้งหมดตามลำดับความยากแบบทีละขั้นตอน เพื่อให้มีประสิทธิภาพสูงสุด!
ดังนั้นฉันจึงรวบรวมคำแนะนำสำหรับการตอบคำถามของ Leetcode: ลำดับการตอบคำถามที่ละเอียดมาก ฉันคัดสรรมาอย่าง ดี README ได้จัดลำดับของคำถามและลำดับของบทความคือลำดับของการตอบคำถาม! เพียงแปรงทีละอันคุณไม่จำเป็นต้องผ่านคำถามมากมายและเลือกหัวข้อด้วยตัวเอง!
นอกจากนี้ ฉันได้เขียนวิธีแก้ปัญหาโดยละเอียดสำหรับคำถามแต่ละข้อ (พร้อมรูปภาพและข้อความ และวิดีโอเกี่ยวกับประเด็นที่ยาก) และวิธีแก้ปัญหาของฉันแสดงอยู่ในหน้าแรกของคำถามที่เกี่ยวข้อง คุณภาพนั้นชัดเจนสำหรับทุกคน
ตอนนี้ฉันได้เรียงลำดับการตอบคำถามเพื่อช่วยให้นักเรียนที่กำลังเรียนรู้อัลกอริธึมหลีกเลี่ยงการออกนอกเส้นทางมากขึ้น!
หากคุณกำลังแปรง Leetcode ขอแนะนำอย่างยิ่งให้ปฏิบัติตามลำดับการแก้ปัญหาในคู่มือนี้ หลังจากเสร็จสิ้นการแปรง คุณจะพบว่าคุณได้ก้าวกระโดดในเชิงคุณภาพทั้งระบบความรู้ และคุณไม่จำเป็นต้องมองหา ทิศทางในทะเลแห่งคำถาม
บทความล่าสุดจะถูกเผยแพร่ก่อนในบัญชีสาธารณะ "Code Caprice" สแกนโค้ดเพื่อดูแล้วคุณจะพบว่าสายเกินไปที่จะพบคุณ!
วิธีใช้คู่มือตอบคำถามนี้
ตามลำดับการจัดเรียงที่กล่าวมาข้างต้น เพียงแค่เริ่มแปรงจากอาร์เรย์ตามลำดับแล้ว ก็ให้แปรงตามลำดับ
ในคู่มือการแปรงคำถาม แต่ละหัวข้อจะมีบทพื้นฐานทางทฤษฎีในตอนเริ่มต้น มันไม่เหมือนกับการแนะนำทางทฤษฎีเหมือนตำราเรียน แต่เป็นบทสรุปของความรู้พื้นฐานที่จำเป็นจากการต่อสู้จริง มีการสรุปในตอนท้ายของแต่ละหัวข้อซึ่งเป็นบทสรุปที่ครอบคลุมมากที่สุดของหัวข้อ
หากคุณเป็นผู้คร่ำหวอดในด้านอัลกอริทึม คู่มือนี้ก็เป็นแหล่งข้อมูลที่ดีที่สุดสำหรับการทบทวน หากคุณอ่านสรุปของแต่ละชุดอย่างรวดเร็ว ระบบความรู้เกี่ยวกับอัลกอริทึมทั้งหมดและโซลูชันต่างๆ จะกลับมาอยู่ในใจคุณ
ทุกวิธีแก้ปัญหาที่นี่เป็นผลงานชิ้นเอกและสมควรได้รับการพิจารณาอย่างรอบคอบ
ฉันใช้ C++ เหมือนกันในการอธิบายปัญหา แต่คุณจะพบว่าคำอธิบายปัญหาเกือบทั้งหมดด้านล่างมีเวอร์ชันภาษาอื่น ๆ เช่น Java, Python, Go, JavaScript ฯลฯ แน่นอนว่าเป็นโค้ดที่สนับสนุนโดยคนที่มีความกระตือรือร้นเหล่านี้ ฉันจะควบคุมคุณภาพโค้ดอย่างเคร่งครัดด้วย
ดังนั้น เรายินดีต้อนรับทุกคนให้เข้าร่วม ปรับปรุงวิธีแก้ปัญหาในเวอร์ชันภาษาต่างๆ ยอมรับโอเพ่นซอร์ส และให้ประโยชน์แก่เพื่อนมากขึ้น
คุณพร้อมหรือยัง มาเริ่มคู่มือตอบคำถามกันเลย!
คำนำ
อาร์เรย์
- อาร์เรย์นั้นง่ายเกินไป แต่คุณควรรู้สิ่งนี้!
- อาร์เรย์: 704 การค้นหาแบบไบนารี
- อาร์เรย์: 27. ลบองค์ประกอบ
- อาร์เรย์: 977 กำลังสองของอาร์เรย์ที่ได้รับคำสั่ง
- อาร์เรย์: 209 อาร์เรย์ย่อยที่มีความยาวขั้นต่ำ
- อาร์เรย์: ผลรวมของช่วง
- Array: นักพัฒนาซอฟต์แวร์ซื้อที่ดิน
- อาร์เรย์: 59. เมทริกซ์เกลียว II
- อาร์เรย์: สรุป
รายการที่เชื่อมโยง
- นี่คือสิ่งที่คุณควรรู้เกี่ยวกับรายการที่เชื่อมโยง!
- รายการที่เชื่อมโยง: 203. ลบองค์ประกอบรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: 707 ออกแบบรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: 206 พลิกรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: 24. แลกเปลี่ยนโหนดในรายการที่เชื่อมโยงเป็นคู่
- รายการที่เชื่อมโยง: 19. ลบโหนด Nth จากด้านล่างสุดของรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: รายการที่เชื่อมโยงตัดกัน
- รายการที่เชื่อมโยง: 142. รายการที่เชื่อมโยงแบบวงกลม
- รายการที่เชื่อมโยง: สรุป!
ตารางแฮช
- สิ่งที่คุณควรรู้เกี่ยวกับตารางแฮช!
- ตารางแฮช: 242 แอนนาแกรมที่ถูกต้อง
- ตารางแฮช: 1002 ค้นหาอักขระทั่วไป
- ตารางแฮช: 349 จุดตัดของสองอาร์เรย์
- ตารางแฮช: 202.เลขสุข
- ตารางแฮช: 1. ผลรวมของตัวเลขสองตัว
- ตารางแฮช: 454 การบวกตัวเลขสี่ตัว II
- ตารางแฮช: 383 จดหมายเรียกค่าไถ่
- ตารางแฮช: 15. ผลรวมของตัวเลขสามตัว
- วิธีสองตัวชี้: 18. ผลรวมของตัวเลขสี่ตัว
- ตารางแฮช : สรุป!
เชือก
- สตริง: 344 สตริงย้อนกลับ
- สตริง: 541 สตริงย้อนกลับ II
- สตริง: แทนที่ตัวเลข
- สตริง: 151 พลิกคำในสตริง
- เชือก: เชือกที่ถนัดขวา
- ช่วยให้คุณเรียนรู้อัลกอริทึม KMP อย่างละเอียด
- สตริง: 459 สตริงย่อยซ้ำ
- สตริง: สรุป!
วิธีการชี้สองครั้ง
โดยทั่วไปวิธี double pointer จะใช้กับปัญหาเกี่ยวกับอาร์เรย์ สตริง และรายการที่เชื่อมโยง
- อาร์เรย์: 27. ลบองค์ประกอบ
- สตริง: 344 สตริงย้อนกลับ
- สตริง: แทนที่ตัวเลข
- สตริง: 151 พลิกคำในสตริง
- รายการที่เชื่อมโยง: 206 พลิกรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: 19. ลบโหนด Nth จากด้านล่างสุดของรายการที่เชื่อมโยง
- รายการที่เชื่อมโยง: รายการที่เชื่อมโยงตัดกัน
- รายการที่เชื่อมโยง: 142. รายการที่เชื่อมโยงแบบวงกลม
- ตัวชี้คู่: 15. ผลรวมของตัวเลขสามตัว
- พอยน์เตอร์คู่: 18 ผลรวมของตัวเลขสี่ตัว
- พอยน์เตอร์คู่: สรุป!
สแต็คและคิว
- สแต็คและคิว: พื้นฐานทางทฤษฎี
- สแต็กและคิว: 232 ใช้สแต็กเพื่อใช้คิว
- สแต็กและคิว: 225 ใช้คิวเพื่อใช้งานสแต็ก
- สแต็คและคิว: 20. วงเล็บที่ถูกต้อง
- สแต็คและคิว: 1,047 ลบรายการที่ซ้ำกันที่อยู่ติดกันทั้งหมดในสตริง
- สแต็คและคิว: 150. การประเมินนิพจน์โปแลนด์แบบย้อนกลับ
- สแต็คและคิว: 239 หน้าต่างเลื่อนสูงสุด
- สแต็กและคิว: 347 องค์ประกอบความถี่สูง K ยอดนิยม
- สแต็คและคิว: สรุป!
ต้นไม้ไบนารี
โครงร่างการจำแนกหัวข้อมีดังนี้:
- นี่คือสิ่งที่คุณควรรู้เกี่ยวกับไบนารีทรี!
- Binary Tree: การข้ามผ่านแบบเรียกซ้ำของ Binary Tree
- ต้นไม้ไบนารี: การสำรวจซ้ำของต้นไม้ไบนารี
- ต้นไม้ไบนารี: วิธีการวนซ้ำแบบรวมสำหรับต้นไม้ไบนารี
- ต้นไม้ไบนารี: การข้ามระดับของต้นไม้ไบนารี
- ต้นไม้ไบนารี: 226 พลิกต้นไม้ไบนารี
- สรุปสัปดาห์นี้! (ต้นไม้ไบนารี)
- ต้นไม้ไบนารี: 101 ต้นไม้ไบนารีแบบสมมาตร
- ต้นไม้ไบนารี: 104 ความลึกสูงสุดของต้นไม้ไบนารี
- ต้นไม้ไบนารี: 111 ความลึกขั้นต่ำของต้นไม้ไบนารี
- ต้นไม้ไบนารี: 222 จำนวนโหนดในต้นไม้ไบนารีที่สมบูรณ์
- ต้นไม้ไบนารี: 110 ต้นไม้ไบนารีที่สมดุล
- ต้นไม้ไบนารี: 257 เส้นทางทั้งหมดของต้นไม้ไบนารี
- สรุปสัปดาห์นี้! (ต้นไม้ไบนารี)
- ต้นไม้ไบนารี: 404 ผลรวมของใบซ้าย
- ต้นไม้ไบนารี: 513 ค้นหาค่าที่มุมซ้ายล่างของต้นไม้
- ต้นไม้ไบนารี: 112 ผลรวมเส้นทาง
- ต้นไม้ไบนารี: 106 สร้างต้นไม้ไบนารี
- ต้นไม้ไบนารี: 654 ต้นไม้ไบนารีสูงสุด
- สรุปสัปดาห์นี้! (ต้นไม้ไบนารี)
- ต้นไม้ไบนารี: 617 รวมต้นไม้ไบนารีสองต้นเข้าด้วยกัน
- แผนผังไบนารี: 700 แผนผังการค้นหาแบบไบนารีปรากฏขึ้น!
- แผนผังไบนารี: 98 ตรวจสอบแผนผังการค้นหาแบบไบนารี
- แผนผังไบนารี: 530 ผลต่างสัมบูรณ์ขั้นต่ำของแผนผังการค้นหา
- ไบนารีทรี: 501 โหมดในแผนผังการค้นหาแบบไบนารี
- ต้นไม้ไบนารี: 236 ปัญหาบรรพบุรุษทั่วไป
- สรุปสัปดาห์นี้! (ต้นไม้ไบนารี)
- Binary Tree: 235 ค้นหาบรรพบุรุษร่วมที่ใกล้ที่สุดของต้นไม้
- ไบนารีทรี: 701 การดำเนินการแทรกในแผนผังการค้นหา
- ต้นไม้ไบนารี: 450 ลบการดำเนินการในแผนผังการค้นหา
- ต้นไม้ไบนารี: 669 การตัดแต่งต้นไม้ค้นหาแบบไบนารี
- Binary Tree: 108 แปลงอาร์เรย์ที่ได้รับคำสั่งเป็นแผนผังการค้นหาแบบไบนารี
- ต้นไม้ไบนารี: 538 แปลงต้นไม้ค้นหาแบบไบนารีเป็นต้นไม้สะสม
- ต้นไม้ไบนารี: สรุป! (ทักษะไบนารีทรีทั้งหมดที่คุณต้องเชี่ยวชาญอยู่ที่นี่)
อัลกอริธึมการย้อนรอย
โครงร่างการจำแนกหัวข้อมีดังนี้:
- นี่คือสิ่งที่คุณควรรู้เกี่ยวกับการย้อนรอยอัลกอริธึม!
- อัลกอริธึมการย้อนรอย: 77. การรวมกัน
- อัลกอริธึมการย้อนรอย: 77. การเพิ่มประสิทธิภาพแบบผสมผสาน
- อัลกอริธึมการย้อนรอย: 216. ผลรวมเชิงรวม III
- อัลกอริธึมการย้อนรอย: 17. การรวมตัวอักษรของหมายเลขโทรศัพท์
- สรุปสัปดาห์นี้! (อัลกอริธึมการย้อนรอยชุดที่หนึ่ง)
- อัลกอริธึมการย้อนรอย: 39. ผลรวมแบบผสมผสาน
- อัลกอริธึมการย้อนรอย: 40. ผลรวมเชิงรวม II
- อัลกอริธึมการย้อนรอย: 131 แยกสตริงพาลินโดรม
- อัลกอริธึมการย้อนรอย: 93. กู้คืนที่อยู่ IP
- อัลกอริธึมการย้อนรอย: 78.เซ็ตย่อย
- สรุปสัปดาห์นี้! (อัลกอริธึมการย้อนรอยชุดที่ 2)
- อัลกอริธึมการย้อนรอย: 90. เซตย่อย II
- อัลกอริธึมการย้อนรอย: 491 การเพิ่มลำดับย่อย
- อัลกอริธึมการย้อนรอย: 46 การเรียงสับเปลี่ยนแบบเต็ม
- อัลกอริธึมการย้อนรอย: 47. การเรียงสับเปลี่ยนรวม II
- สรุปสัปดาห์นี้! (อัลกอริทึมการย้อนรอยชุดที่สาม)
- อีกวิธีหนึ่งในการเขียนอัลกอริธึมการย้อนรอยเพื่อลบรายการที่ซ้ำกัน
- อัลกอริธึมการย้อนรอย: 332 จัดเรียงแผนการเดินทางใหม่
- อัลกอริธึมการย้อนรอย: 51.N Queen
- อัลกอริทึมการย้อนรอย: 37. แก้ซูโดกุ
- สรุปอัลกอริธึมการย้อนรอย
อัลกอริธึมโลภ
โครงร่างการจำแนกหัวข้อมีดังนี้:
- สิ่งที่คุณควรรู้เกี่ยวกับอัลกอริธึมโลภ!
- อัลกอริธึมโลภ: 455 แจกจ่ายคุกกี้
- อัลกอริธึมโลภ: 376 ลำดับการสวิง
- อัลกอริธึมโลภ: 53 ผลรวมลำดับสูงสุด
- สรุปสัปดาห์นี้! (อัลกอริธึมโลภชุดที่ 1)
- Greedy Algorithm: 122 เวลาที่ดีที่สุดในการซื้อและขายหุ้น II
- อัลกอริธึมโลภ: 55. เกมกระโดด
- อัลกอริธึมโลภ: 45. Jump Game II
- อัลกอริธึมโลภ: ผลรวมอาร์เรย์สูงสุดหลังจากการปฏิเสธ 1,005.K
- สรุปสัปดาห์นี้! (อัลกอริทึมความโลภชุดที่ 2)
- อัลกอริธึมโลภ: 134. ปั๊มน้ำมัน
- อัลกอริธึมโลภ: 135 แจกขนม
- อัลกอริธึมโลภ: 860 การเปลี่ยนแปลงน้ำมะนาว
- อัลกอริธึมโลภ: 406 สร้างคิวใหม่ตามความสูง
- สรุปสัปดาห์นี้! (อัลกอริธึมโลภชุดที่ 3)
- อัลกอริธึมโลภ: 406 สร้างคิวใหม่ตามความสูง (ภาคต่อ)
- อัลกอริธึมโลภ: 452 ระเบิดบอลลูนด้วยจำนวนลูกศรขั้นต่ำ
- อัลกอริธึมโลภ: 435 ไม่มีช่วงเวลาที่ทับซ้อนกัน
- อัลกอริธึมโลภ: 763 แบ่งช่วงตัวอักษร
- อัลกอริธึมโลภ: 56 ผสานช่วงเวลา
- สรุปสัปดาห์นี้! (อัลกอริทึมความโลภชุดที่ 4)
- อัลกอริธึมโลภ: 738 จำนวนที่เพิ่มขึ้นอย่างจำเจ
- อัลกอริธึมโลภ: 968 ตรวจสอบแผนผังไบนารี
- อัลกอริธึมโลภ: สรุป! (ทุกบทสรุปต้องเป็นคลาสสิก)
การเขียนโปรแกรมแบบไดนามิก
หัวข้อการเขียนโปรแกรมแบบไดนามิกได้เริ่มต้นขึ้นแล้ว ไม่มีเวลาอธิบายเพื่อน ๆ ขึ้นรถบัสแล้วอย่าตามหลัง!
- สิ่งที่คุณควรรู้เกี่ยวกับการเขียนโปรแกรมแบบไดนามิก!
- การเขียนโปรแกรมแบบไดนามิก: 509. หมายเลขฟีโบนัชชี
- การตั้งโปรแกรมแบบไดนามิก: 70. ปีนบันได
- การเขียนโปรแกรมแบบไดนามิก: 746 ปีนบันไดด้วยต้นทุนขั้นต่ำ
- สรุปสัปดาห์นี้! (การวางแผนแบบไดนามิกชุดที่ 1)
- การเขียนโปรแกรมแบบไดนามิก: 62. เส้นทางที่แตกต่างกัน
- การเขียนโปรแกรมแบบไดนามิก: 63. เส้นทางที่แตกต่างกัน II
- การเขียนโปรแกรมแบบไดนามิก: 343 การแบ่งจำนวนเต็ม
- การเขียนโปรแกรมแบบไดนามิก: 96. ต้นไม้การค้นหาไบนารีที่แตกต่างกัน
- สรุปสัปดาห์นี้! (การเขียนโปรแกรมไดนามิกซีรีส์ 2)
ซีรี่ส์ปัญหากระเป๋าเป้สะพายหลัง:
- การตั้งโปรแกรมแบบไดนามิก: 01 พื้นฐานทางทฤษฎีของเป้สะพายหลัง
- การเขียนโปรแกรมแบบไดนามิก: 01 พื้นฐานทางทฤษฎีของแบ็คแพ็ค (อาเรย์แบบกลิ้ง)
- การเขียนโปรแกรมแบบไดนามิก: 416 การแบ่งพาร์ติชัน Equisum
- การเขียนโปรแกรมแบบไดนามิก: 1,049 น้ำหนักของหินก้อนสุดท้าย II
- สรุปสัปดาห์นี้! (การวางแผนแบบไดนามิกซีรีส์ 3)
- การเขียนโปรแกรมแบบไดนามิก: 494. เป้าหมายและ
- การเขียนโปรแกรมแบบไดนามิก: 474 คนและศูนย์
- การเขียนโปรแกรมแบบไดนามิก: สรุปกระเป๋าเป้ที่สมบูรณ์
- การเขียนโปรแกรมแบบไดนามิก: 518 เปลี่ยน Exchange II
- สรุปสัปดาห์นี้! (การเขียนโปรแกรมไดนามิกซีรีส์ 4)
- การเขียนโปรแกรมแบบไดนามิก: 377 ผลรวมเชิงผสม IV
- การเขียนโปรแกรมแบบไดนามิก: 70. การปีนบันได (เวอร์ชั่นแบ็คแพ็คเต็ม)
- การเขียนโปรแกรมแบบไดนามิก: 322 เปลี่ยนการแลกเปลี่ยน
- การเขียนโปรแกรมแบบไดนามิก: 279 ตัวเลขกำลังสองที่สมบูรณ์แบบ
- สรุปสัปดาห์นี้! (การเขียนโปรแกรมไดนามิกซีรีส์ 5)
- การเขียนโปรแกรมแบบไดนามิก: 139. การแยกคำ
- การเขียนโปรแกรมแบบไดนามิก: พื้นฐานทางทฤษฎีของเป้หลายใบ
- สรุปปัญหากระเป๋าเป้
ซีรี่ส์การโจรกรรม:
- การเขียนโปรแกรมแบบไดนามิก: 198. การโจรกรรม
- การเขียนโปรแกรมแบบไดนามิก: 213. การโจรกรรม II
- การเขียนโปรแกรมแบบไดนามิก: 337. การโจรกรรม III
ซีรี่ส์สต็อก:
- Dynamic Programming: 121 เวลาที่ดีที่สุดในการซื้อและขายหุ้น
- Dynamic Programming: สรุปสัปดาห์นี้ (ซีรี่ส์ 6)
- Dynamic Programming: 122 เวลาที่ดีที่สุดในการซื้อและขายหุ้น II
- Dynamic Programming: 123 เวลาที่ดีที่สุดในการซื้อและขายหุ้น III
- Dynamic Programming: 188 เวลาที่ดีที่สุดในการซื้อและขายหุ้น IV
- โปรแกรมแบบไดนามิก: 309 เวลาที่ดีที่สุดในการซื้อและขายหุ้นรวมถึงช่วงหยุดนิ่งด้วย
- Dynamic Programming: สรุปสัปดาห์นี้ (ซีรี่ส์ 7)
- โปรแกรมแบบไดนามิก: 714 เวลาที่ดีที่สุดในการซื้อและขายหุ้นรวมถึงค่าธรรมเนียมการจัดการ
- การเขียนโปรแกรมแบบไดนามิก: สรุปซีรี่ส์หุ้น
ซีรี่ส์ที่ตามมา:
- การโปรแกรมแบบไดนามิก: 300 ลำดับการเพิ่มขึ้นที่ยาวที่สุด
- การเขียนโปรแกรมแบบไดนามิก: 674 ลำดับที่เพิ่มขึ้นอย่างต่อเนื่องที่ยาวที่สุด
- การเขียนโปรแกรมแบบไดนามิก: 718 อาร์เรย์ย่อยที่ยาวที่สุดซ้ำ
- การเขียนโปรแกรมแบบไดนามิก: 1143 ลำดับย่อยทั่วไปที่ยาวที่สุด
- การตั้งโปรแกรมแบบไดนามิก: 1,035 เส้นที่ไม่ต่อเนื่อง
- การเขียนโปรแกรมแบบไดนามิก: 53. ผลรวมลำดับสูงสุด
- การเขียนโปรแกรมแบบไดนามิก: 392 การกำหนดลำดับย่อย
- การเขียนโปรแกรมแบบไดนามิก: 115 ลำดับย่อยที่แตกต่างกัน
- การเขียนโปรแกรมแบบไดนามิก: 583 การดำเนินการลบสองสาย
- การเขียนโปรแกรมแบบไดนามิก: 72. แก้ไขระยะทาง
- แก้ไขสรุประยะทาง
- การเขียนโปรแกรมแบบไดนามิก: 647. สตริงย่อย Palindrome
- การเขียนโปรแกรมแบบไดนามิก: 516 ลำดับย่อยพาลินโดรมที่ยาวที่สุด
- สรุปการเขียนโปรแกรมแบบไดนามิก
กองโมโนโทนิค
- โมโนโทนซ้อน: 739 อุณหภูมิรายวัน
- สแต็กโมโนโทน: 496 องค์ประกอบที่ใหญ่กว่าถัดไป I
- สแต็กโมโนโทน: 503 องค์ประกอบที่ใหญ่กว่าถัดไป II
- กองโมโนโทน: 42. การรับน้ำฝน
- สแต็คแบบโมโนโทนิก: 84 สี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดในฮิสโตแกรม
ทฤษฎีกราฟ
ทฤษฎีกราฟเปิดตัวอย่างเป็นทางการ
- ทฤษฎีกราฟ: รากฐานทางทฤษฎี
- ทฤษฎีกราฟ: พื้นฐานทางทฤษฎีของการค้นหาเชิงลึกก่อน
- ทฤษฎีกราฟ: เส้นทางที่เข้าถึงได้ทั้งหมด
- ทฤษฎีกราฟ: พื้นฐานทางทฤษฎีของการค้นหาแบบกว้างก่อน
- ทฤษฎีกราฟ: จำนวนเกาะเวอร์ชันการค้นหาเชิงลึก
- ทฤษฎีกราฟ: จำนวนเกาะ เวอร์ชันกวงซู
- ทฤษฎีกราฟ: พื้นที่สูงสุดของเกาะ
- ทฤษฎีกราฟ: พื้นที่รวมของเกาะ
- ทฤษฎีกราฟ: เกาะจม
- ทฤษฎีกราฟ: ปัญหาการไหลของน้ำ
- ทฤษฎีกราฟ: การสร้างเกาะที่ใหญ่ที่สุด
- ทฤษฎีกราฟ: String Solitaire
- ทฤษฎีกราฟ: การเข้าถึงกราฟแบบกำหนดทิศทางได้อย่างสมบูรณ์
- ทฤษฎีกราฟ: เส้นรอบวงของเกาะ
- ทฤษฎีกราฟ: พื้นฐานของทฤษฎีการค้นหาแบบสหภาพ
- ทฤษฎีกราฟ: การค้นหาเส้นทางสู่การดำรงอยู่
- ทฤษฎีกราฟ: การเชื่อมต่อซ้ำซ้อน
- ทฤษฎีกราฟ: การเชื่อมต่อซ้ำซ้อน II
- ทฤษฎีกราฟ: เบื้องต้นของต้นไม้ที่ทอดข้ามขั้นต่ำ
- ทฤษฎีกราฟ: ครูสคาลของต้นไม้ที่ทอดยาวน้อยที่สุด
- ทฤษฎีกราฟ: การเรียงลำดับทอพอโลยี
- ทฤษฎีกราฟ: dijkstra (เวอร์ชันไร้เดียงสา)
- ทฤษฎีกราฟ: dijkstra (เวอร์ชันที่ปรับให้เหมาะสมฮีป)
- ทฤษฎีกราฟ: อัลกอริธึม Bellman_ford
- ทฤษฎีกราฟ: อัลกอริธึมการเพิ่มประสิทธิภาพคิวของ Bellman_ford (หรือที่เรียกว่า SPFA)
- ทฤษฎีกราฟ: วงจรน้ำหนักเชิงลบในการตัดสินของ Bellman_ford
- ทฤษฎีกราฟ: เส้นทางที่สั้นที่สุดที่มีขอบเขตจำกัดที่สุดของ Bellman_ford
- ทฤษฎีกราฟ: อัลกอริทึมของฟลอยด์
- ทฤษฎีกราฟ: อัลกอริธึม A*
- ทฤษฎีกราฟ: สรุปอัลกอริทึมเส้นทางที่สั้นที่สุด
- ทฤษฎีกราฟ: สรุปทฤษฎีกราฟ
(มีการปรับปรุงอย่างต่อเนื่อง...)
สิบอันดับแรก
ทฤษฎีจำนวน
คำถามคลาสสิคเกี่ยวกับโครงสร้างข้อมูลขั้นสูง
- และค้นหาคอลเลกชัน
- ต้นไม้ที่ทอดยาวที่สุด
- ต้นไม้แบ่งส่วน
- อาร์เรย์ต้นไม้
- ต้นไม้พจนานุกรม
การประมวลผลข้อมูลขนาดใหญ่
คำถามเสริม
คำถามข้างต้นมีความสำคัญสูงสุด คุณต้องศึกษาคำถามเหล่านี้อย่างน้อยสองครั้งเพื่อทำความเข้าใจอย่างถ่องแท้ หากคุณมีความเชี่ยวชาญในคำถามข้างต้นและยังคงมองหาคำถามอื่นเพื่อฝึกฝน คุณสามารถศึกษาคำถามต่อไปนี้อีกครั้ง:
คำถามเหล่านี้ดีมาก แต่บางข้อก็คล้ายกับคู่มือการแปรงคำถาม และวิธีแก้ปัญหาบางส่วนจะมีการเสริมในภายหลัง ดังนั้นฉันจึงไม่ได้รวมไว้ในคู่มือการแปรงคำถาม ฉันจะปรับปรุงวิธีแก้ปัญหาบางอย่างในอนาคต และรวมไว้ในกลยุทธ์การแก้ปัญหา
อาร์เรย์
- 1365.มีกี่ตัวเลขที่น้อยกว่าตัวเลขปัจจุบัน?
- 941. อาร์เรย์ภูเขาที่ถูกต้อง (ตัวชี้คู่)
- 1207. แอปพลิเคชันคลาสสิกของอาร์เรย์ที่ไม่ซ้ำใครในการแฮช
- 283. ย้ายศูนย์ [อาร์เรย์] [ตัวชี้คู่]
- 189. หมุนอาร์เรย์
- 724. ค้นหาดัชนีศูนย์กลางของอาร์เรย์
- 34. ค้นหาตำแหน่งแรกและตำแหน่งสุดท้ายขององค์ประกอบในอาร์เรย์ที่เรียงลำดับ (วิธีแบ่ง)
- 922. จัดเรียงอาร์เรย์ตามคี่และคู่ II
- 35.ค้นหาตำแหน่งการแทรก
รายการที่เชื่อมโยง
- 24. แลกเปลี่ยนโหนดในรายการที่เชื่อมโยงแบบคู่
- 234. รายการที่เชื่อมโยงพาลินโดรม
- 143. จัดเรียงรายการที่เชื่อมโยงใหม่ [อาร์เรย์] [คิวสองทาง] [ใช้งานรายการที่เชื่อมโยงโดยตรง]
- 141. รายการเชื่อมโยงแบบวงกลม
- 160. รายการที่เชื่อมโยงที่ตัดกัน
ตารางแฮช
- 205. สตริง Isomorphic: [การประยุกต์ใช้ตารางแฮช]
เชือก
- 925 กดแบบยาวเพื่อจำลองการจับคู่
- 0844. เปรียบเทียบสตริงที่มี backspace [การจำลองสแต็ก] [พอยน์เตอร์สองตัวที่มีพื้นที่ดีกว่า]
ต้นไม้ไบนารี
- 129. ค้นหาผลรวมของตัวเลขตั้งแต่รูทถึงโหนดลีฟ
- 1382. แปลงแผนผังการค้นหาแบบไบนารี่ให้สมดุลและสร้างแผนผังการค้นหาแบบไบนารีที่สมดุล
- 100. ต้นไม้ต้นเดียวกันมีแนวคิดเดียวกันกับ 101 ต้นไม้ไบนารีแบบสมมาตร
- 116. กรอกตัวชี้โหนดด้านขวาถัดไปของแต่ละโหนด
อัลกอริธึมการย้อนรอย
โลภ
- 649.Dota2 วุฒิสภาเป็นเรื่องยาก
- 1221 การแยกตัวละครที่สมดุลนั้นเรียบง่ายและโลภ
การเขียนโปรแกรมแบบไดนามิก
- 5. สตริงย่อยของพาลินโดรมที่ยาวที่สุดเกือบจะเหมือนกับสตริงย่อยของพาลินโดรม 647
- 132. Split Palindrome String II คล้ายกับ 647 มาก สตริงย่อย Palindrome และ 5 สตริงย่อย Palindrome ที่ยาวที่สุด
- 673 จำนวนลำดับย่อยที่เพิ่มขึ้นยาวที่สุด
ทฤษฎีกราฟ
- 463.ปริมณฑลของเกาะ (จำลอง)
- 841 กุญแจและห้อง [กราฟกำกับ] dfs, bfs สามารถใช้ได้
- 127.คำเล่นไพ่คนเดียวกวางซู
และค้นหาคอลเลกชัน
- 684.การเชื่อมต่อซ้ำซ้อน [คำถามพื้นฐานเกี่ยวกับการค้นหาแบบรวม]
- 685. การเชื่อมต่อซ้ำซ้อน II [การประยุกต์ใช้การค้นหายูเนี่ยน]
การจำลอง
- 657.หุ่นยนต์สามารถกลับไปยังจุดกำเนิดได้หรือไม่?
- 31.การจัดเตรียมครั้งต่อไป
การดำเนินการบิต
- 1356. เรียงลำดับตามเลข 1 ในระบบไบนารี่ดิจิทัล
เทมเพลตอัลกอริทึม
เทมเพลตอัลกอริทึมพื้นฐานต่างๆ
ผู้ร่วมให้ข้อมูล
คลิกที่นี่เพื่อดูผู้มีส่วนร่วมใน LeetCode-Master ทั้งหมด ขอขอบคุณพวกเขาสำหรับการเสริม LeetCode-Master เวอร์ชันภาษาอื่นๆ เพื่อให้ผู้อ่านได้รับประโยชน์จากโปรเจ็กต์นี้มากขึ้น
สตาร์เทรนด์
เกี่ยวกับผู้เขียน
สวัสดีทุกคน ฉันเป็นโปรแกรมเมอร์ Carl ซึ่งเป็นนักวิจัยอาวุโสของ Harbin Institute of Technology และเป็นผู้เขียน "Code Captions" ฉันมีส่วนร่วมในการวิจัยและพัฒนาเทคโนโลยีแบ็คเอนด์ที่ซ่อนอยู่ที่ Tencent และ Baidu
ดาวน์โหลด PDF
เพิ่มบัญชี WeChat ของบริษัทต่อไปนี้ แล้วเวอร์ชัน PDF จะถูกส่งไปยังทุกคนโดยอัตโนมัติ คุณยังสามารถเลือกได้ว่าจะเข้าร่วมกลุ่มตอบคำถามหรือไม่
อย่าลืมจดบันทึกเมื่อเพิ่ม WeChat หากคุณทำงานอยู่แล้ว หมายเหตุ: ชื่อ-เมือง-ตำแหน่ง หากเป็นนักเรียน โปรดทราบ: ชื่อ-โรงเรียน-เกรด หมายเหตุ: ถ้าไม่แนะนำตัวเองจะผ่านไม่ได้