Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. การท่องต้นไม้ N-ary แบบ Level Order ใน C++

    การท่องต้นไม้ N-ary แบบ Level Order (N-ary Tree Level Order Traversal) ให้ต้นไม้ N-ary (โหนดแต่ละตัวมีลูกได้หลายตัว) ทำ level order traversal คืนค่าเป็นลิสต์ของลิสต์ค่าแต่ละระดับ ตัวอย่าง: [1,null,3,2,4,null,5,6] → [[1],[3,2,4],[5,6]] ขั้นตอนการแก้ปัญหา (BFS) สร้าง ans (vector of vector) ถ้า root

  2. ช่วงที่ไม่ทับซ้อน (Non-overlapping Intervals) ใน C++

    ช่วงที่ไม่ทับซ้อน (Non-overlapping Intervals) ให้ชุดของช่วง (intervals) หาจำนวนช่วงน้อยที่สุดที่ต้องลบเพื่อให้ช่วงที่เหลือไม่ทับซ้อนกัน ตัวอย่าง: [[1,2],[2,3],[3,4],[1,3]] → ลบ [1,3] 1 ช่วง เหลือ [1,2],[2,3],[3,4] ที่ไม่ทับซ้อน ขั้นตอนการแก้ปัญหา (Greedy: Interval Scheduling) ถ้าอาร์เรย์ว่าง คืนค่

  3. การลบโหนดใน BST (Delete Node in a BST) ใน C++

    การลบโหนดใน Binary Search Tree (Delete Node in a BST) ให้ BST และคีย์ k ต้องการลบโหนดที่มีค่า k แล้วคืน BST ที่อัปเดตแล้ว ตัวอย่าง: ต้นไม้ [5,3,6,2,4,null,7] ลบ 3 → ผลลัพธ์ [5,4,6,2,null,7] ขั้นตอนการแก้ปัญหา ฟังก์ชัน deleteRoot(root) ลบโหนดราก: ถ้าไม่มีลูกขวา คืนค่า left หา inorder successor (ค่

  4. จำนวนลูกศรน้อยที่สุดเพื่อทำลายลูกโป่ง (Minimum Number of Arrows to Burst Balloons) ใน C++

    จำนวนลูกศรน้อยที่สุดเพื่อทำลายลูกโป่ง (Minimum Number of Arrows to Burst Balloons) มีลูกโป่งทรงกลมกระจายอยู่ในพื้นที่ 2 มิติ แต่ละลูกมีพิกัดเริ่มต้นและสิ้นสุดของเส้นผ่านศูนย์กลางแนวนอน (start < end) ยิงลูกศรขึ้นไปตามแนวตั้งที่ตำแหน่ง x จะทำลายลูกโป่งที่ xstart ≤ x ≤ xend หาจำนวนลูกศรน้อยที่สุดเพื่อท

  5. วงจรในอาร์เรย์วงกลม (Circular Array Loop) ใน C++

    วงจรในอาร์เรย์วงกลม (Circular Array Loop) 1 ตัวอย่าง: [2,-1,1,2,2] → true (วงจร 0→2→3→0 ความยาว 3) ขั้นตอนการแก้ปัญหา (Fast & Slow Pointers) n = nums.size(), ถ้า n < 2 คืนค่า false ปรับค่า nums[i] %= n ทุกตัว วนทุก index i: ถ้า nums[i] == 0 ข้าม (visited แล้ว) ใช้ slow/fast pointers ตรวจจับ cycl

  6. ผลรวมต้นไม้ย่อยที่พบบ่อยที่สุด (Most Frequent Subtree Sum) ใน C++

    ผลรวมต้นไม้ย่อยที่พบบ่อยที่สุด (Most Frequent Subtree Sum) ผลรวมต้นไม้ย่อย (subtree sum) ของโหนดคือผลรวมค่าของโหนดทั้งหมดในต้นไม้ย่อยที่รากคือโหนดนั้น (รวมตัวมันเอง) หาผลรวมที่เกิดบ่อยที่สุด ถ้ามีหลายค่าเท่ากัน ให้คืนค่าทั้งหมด ตัวอย่าง: [5,2,-5] → ผลรวม: 5+2-5=2 (ราก), 2 (ลูกซ้าย), -5 (ลูกขวา) → 2

  7. หาค่าด้านซ้ายสุดของแถวสุดท้ายในต้นไม้แบนารี (Find Bottom Left Tree Value) ใน C++

    หาค่าด้านซ้ายสุดของแถวสุดท้าย (Find Bottom Left Tree Value) ให้ต้นไม้แบนารี หาค่าของโหนดที่อยู่ด้านซ้ายสุดในระดับลึกที่สุด (deepest level) ตัวอย่าง: ต้นไม้ [3,5,1,6,2,0,8,null,null,7,4] → ระดับสุดท้ายคือ [7,4] ค่าซ้ายสุดคือ 7 ขั้นตอนการแก้ปัญหา (DFS Pre-order) กำหนดตัวแปร ans และ maxLevel = -1 ฟัง

  8. หาค่าสูงสุดแต่ละระดับของต้นไม้แบนารี (Largest Value in Each Tree Row) ใน C++

    หาค่าสูงสุดแต่ละระดับของต้นไม้แบนารี (Find Largest Value in Each Tree Row) ให้ต้นไม้แบนารี หาค่าสูงสุดในแต่ละระดับ (level) ของต้นไม้ ตัวอย่าง: ต้นไม้ [1,3,2,5,3,null,9] → ผลลัพธ์ [3,5,9] (ระดับ 0: 1, ระดับ 1: max(3,2)=3, ระดับ 2: max(5,3,9)=9) ขั้นตอนการแก้ปัญหา (DFS) สร้างเวกเตอร์ ans เก็บค่าสูงส

  9. ต้นไม้แบนารีสูงสุด (Maximum Binary Tree) ใน C++

    ต้นไม้แบนารีสูงสุด (Maximum Binary Tree) ให้อาร์เรย์จำนวนเต็มที่ไม่ซ้ำกัน ต้นไม้สูงสุด (Maximum Tree) สร้างขึ้นได้ดังนี้: รากเป็นค่าสูงสุดในอาร์เรย์ ต้นไม้ย่อยซ้ายสร้างจากส่วนซ้ายของค่าสูงสุด ต้นไม้ย่อยขวาสร้างจากส่วนขวาของค่าสูงสุด ตัวอย่าง: [3,2,1,6,0,5] → รากคือ 6, ซ้ายคือ [3,2,1], ขวาคือ [0,5]

  10. ความกว้างสูงสุดของต้นไม้แบนารี (Maximum Width of Binary Tree) ใน C++

    ความกว้างสูงสุดของต้นไม้แบนารี (Maximum Width of Binary Tree) ความกว้างของระดับในต้นไม้แบนารี คือระยะห่างระหว่างโหนดซ้ายสุดและขวาสุดที่ไม่ใช่ null (นับโหนด null ระหว่างทางด้วย) ความกว้างของต้นไม้คือค่าสูงสุดของความกว้างทุกระดับ ตัวอย่าง: ต้นไม้ [1,3,2,5,3,null,9] ความกว้างสูงสุดคือ 4 (ระดับสุดท้าย:

  11. การตัดแต่งต้นไม้แบนารี (Binary Tree Pruning) ใน C++

    การตัดแต่งต้นไม้แบนารี (Binary Tree Pruning) ให้รากของต้นไม้แบนารีที่ค่าโหนดเป็น 0 หรือ 1 ต้องการตัดแต่งต้นไม้ย่อยที่ไม่มีค่า 1 ออกทั้งหมด (คือถ้าต้นไม้ย่อยไม่มี 1 เลย ให้ลบทิ้ง) ตัวอย่าง: ต้นไม้ [1,1,0,1,1,0,1,0] หลังตัดแต่งจะเหลือ [1,1,0,1,1,1] ขั้นตอนการแก้ปัญหา (DFS Post-order) กำหนดฟังก์ชัน p

  12. ผลรวมสูงสุดของ Subarray วงกลม (Maximum Sum Circular Subarray) ใน C++

    ผลรวมสูงสุดของ Subarray วงกลม (Maximum Sum Circular Subarray) ให้อาร์เรย์วงกลม C ที่แทนด้วยอาร์เรย์ A หา subarray ที่ไม่ว่างเปล่าที่มีผลรวมสูงสุด (subarray อาจครอบคลุมปลายทั้งสองของอาร์เรย์ได้) แต่แต่ละองค์ประกอบของ A ใช้ได้สูงสุด 1 ครั้ง ตัวอย่าง: [1,-2,3,-2] → ผลลัพธ์ 3 (subarray [3]) ขั้นตอนการแ

  13. การตรวจสอบลำดับ Stack Sequences ใน C++

    การตรวจสอบลำดับ Stack Sequences (Validate Stack Sequences) ให้ลำดับ pushed และ popped ที่มีค่าต่างกันทั้งหมด ต้องการทราบว่าลำดับ popped นี้อาจเป็นผลลัพธ์จากการ push และ pop บน stack เริ่มต้นว่างได้หรือไม่ ตัวอย่าง: push = [1,2,3,4,5], pop = [4,5,3,2,1] → true ลำดับการทำงาน: push(1), push(2), push(3)

  14. ต้นไม้แบนารีที่กลับด้านได้เทียบเท่า (Flip Equivalent Binary Trees) ใน C++

    ต้นไม้แบนารีที่กลับด้านได้เทียบเท่า (Flip Equivalent Binary Trees) การ กลับด้าน (flip) หมายถึงเลือกโหนดใดโหนดหนึ่ง แล้วสลับต้นไม้ย่อยซ้ายและขวา ต้นไม้ X และ Y เป็น flip equivalent ถ้าสามารถทำให้ Y ได้จาก X โดยการ flip จำนวนครั้งหนึ่งๆ ตัวอย่าง: ต้นไม้สองต้นที่ flip โหนดค่า 1, 3, 5 แล้วจะเทียบเท่ากัน

  15. การตรวจสอบต้นไม้แบนารีสมบูรณ์ (Complete Binary Tree) ใน C++

    การตรวจสอบต้นไม้แบนารีสมบูรณ์ (Check Completeness of a Binary Tree) ต้นไม้แบนารีสมบูรณ์ (Complete Binary Tree) ระดับ n จะมี n-1 ระดับที่เต็มสมบูรณ์ และโหนดในระดับ n จะถูกเติมจากซ้ายไปขวาโดยไม่มีช่องว่าง ตัวอย่าง: ต้นไม้ [1,2,3,4,5,6] เป็นต้นไม้สมบูรณ์ ผลลัพธ์คือ true (1) ขั้นตอนการแก้ปัญหา (BFS) ถ

  16. การจัดเรียงแบบแพนเค้ก (Pancake Sorting) ใน C++

    การจัดเรียงแบบแพนเค้ก (Pancake Sorting) การจัดเรียงแบบแพนเค้กเป็นอัลกอริธึมที่ใช้การดำเนินการเดียวคือ rev(arr, i) ซึ่งกลับลำดับองค์ประกอบของอาร์เรย์จากตำแหน่ง 0 ถึง i แนวคิดคล้าย Selection Sort: วางค่าสูงสุดไว้ท้าย แล้วลดขนาดอาร์เรย์ลงเรื่อยๆ ตัวอย่าง: อินพุท [54,85,52,25,98,75,25,11,68] ผลลัพธ์ [11

  17. การกระจายเหรียญในต้นไม้แบนารีใน C++

    ปัญหาการกระจายเหรียญในต้นไม้แบนารี (Distribute Coins in Binary Tree) ให้รากของต้นไม้แบนารีที่มี N โหนด แต่ละโหนดมีค่า node.val แทนจำนวนเหรียญ รวมเหรียญทั้งหมด N เหรียญ ในหนึ่งการเคลื่อนย้าย สามารถเลือกโหนดที่อยู่ติดกันสองโหนด และย้ายเหรียญหนึ่งเหรียญจากโหนดหนึ่งไปอีกโหนด (อาจเป็นจากพ่อไปลูก หรือลูกไ

  18. ค่าใช้จ่ายขั้นต่ำสำหรับตั๋วเดินทางใน C++

    ปัญหาค่าใช้จ่ายขั้นต่ำสำหรับตั๋วเดินทาง (Minimum Cost For Tickets) สมมติว่ามีประเทศหนึ่งที่นิยมเดินทางด้วยรถไฟ เราวางแผนเดินทางล่วงหน้าหนึ่งปี มีอาร์เรย์เก็บวันที่เราจะเดินทาง (วันที่เป็นจำนวนเต็ม 1 ถึง 365) ตั๋วรถไฟขาย 3 แบบ: ตั๋ว 1 วัน ราคา costs[0] ดอลลาร์ ตั๋ว 7 วัน ราคา costs[1] ดอลลาร์ ตั๋ว 3

  19. การหาช่วงตัดของรายการช่วงใน C++

    การหาช่วงตัดของรายการช่วง (Interval List Intersections) สมมติว่าเรามีสองรายการของช่วงปิด (closed intervals) โดยแต่ละรายการมีช่วงที่ไม่ทับซ้อนกัน (pairwise disjoint) และเรียงลำดับแล้ว เราต้องการหาช่วงตัด (intersection) ของสองรายการช่วงนี้ ช่วงปิด [a, b] หมายถึง a ≤ b คือเซตของจำนวนจริง x ที่ทำให้ a ≤

  20. Maximum Binary Tree II ใน C++

    โจทย์: กำหนด root ของ maximum tree (ต้นไม้ที่โหนดแต่ละตัวมีค่ามากกว่าทุกโหนดใน subtree) ต้นไม้นี้สร้างจาก list A ด้วยฟังก์ชัน construct(): ถ้า A ว่าง: return null หา A[i] ที่มากที่สุด สร้าง root = A[i] Left child = construct(A[0..i-1]) Right child = construct(A[i+1..n-1]) Return root เราไม่ได้รับ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:143/301  20-คอมพิวเตอร์/Page Goto:1 137 138 139 140 141 142 143 144 145 146 147 148 149