Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หาตัวเลขที่ไม่ซ้ำในอาร์เรย์ที่ทุกตัวอื่นปรากฏ K ครั้งใน C++

    โจทย์ อาร์เรย์ A มีทุกตัวเลขปรากฏ m ครั้ง ยกเว้น 1 ตัวที่ปรากฏเพียง 1 ครั้ง หาตัวเลขตัวนั้น ตัวอย่าง: A = [6, 2, 7, 2, 2, 6, 6], m = 3 → 7 วิธีการแก้ปัญหา (Bit Manipulation) นับจำนวน bit 1 ในแต่ละตำแหน่ง (0-31) ของทุกตัวเลขในอาร์เรย์ สำหรับแต่ละ bit position: count[i] % m = bit ของตัวเลขที่ไม่ซ้ำ

  2. หา Maximum Consecutive Increasing Path Length ใน Binary Tree ใน C++

    โจทย์ กำหนด Binary Tree หาความยาวเส้นทาง (path) ที่ยาวที่สุดที่ประกอบด้วยโหนดที่มีค่า consecutive increasing (เพิ่มขึ้นทีละ 1) ทุกโหนดนับเป็น path ยาว 1 ตัวอย่าง: ต้นไม้ที่มี path 11→12→13 → คำตอบ = 3 วิธีการแก้ปัญหา Recursive DFS: ฟังก์ชัน solve(root, prev_data, prev_length): Base c

  3. Merge K Sorted Arrays ขนาดต่างกันใน C++

    โจทย์ กำหนด K sorted arrays ขนาดต่างกัน รวม (merge) เป็น 1 sorted array ตัวอย่าง: k=3, arrays: {2,4}, {3,5,7}, {1,10,11,12} → 1 2 3 4 5 7 10 11 12 วิธีการแก้ปัญหา ใช้ Min-Heap (Priority Queue) ขนาด K: Push element แรกของแต่ละ array เข้า heap พร้อมเก็บ (value, array_index, element_index) Pop min จ

  4. ลดค่า Max-Min ของ Triplet จาก 3 Sorted Arrays ใน C++

    แนวคิด กำหนด 3 sorted arrays A, B, C ขนาดไม่จำเป็นต้องเท่ากัน หา triplet (A[i], B[j], C[k]) ที่ทำให้ max(A[i], B[j], C[k]) - min(A[i], B[j], C[k]) มีค่าน้อยที่สุด ตัวอย่าง: - A=[2,5,6,9,11], B=[7,10,16], C=[3,4,7,7] → min diff = 1 (เลือก 6,7,7) - A=[6,9,11,16], B=[7,10,16,79,90], C=[3,4,7,7,9,9,11]

  5. หา Minimum Cost Path ใน Grid 4 ทิศทางด้วย Dijkstra ใน C++

    โจทย์ กำหนด 2D array แต่ละเซลล์มีค่า cost หาเส้นทางจากมุมซ้ายบน (0,0) ไปมุมขวาล่าง (n-1,m-1) ที่มี cost รวมน้อยที่สุด สามารถเดินได้ 4 ทิศทาง (ซ้าย ขวา บน ล่าง) วิธีการแก้ปัญหา ใช้ Dijkstras Algorithm บน Grid: โหนด = เซลล์ (x,y), edge weight = cost ของเซลล์ปลายทาง Priority queue (min-heap) เรียงตาม

  6. ต้นทุนต่ำสุดในการตัดกระดานเป็นสี่เหลี่ยมจัตุรัสใน C++

    แนวคิด กระดานขนาด p×q ต้องตัดเป็น p×q ชิ้นสี่เหลี่ยมจัตุรัส ต้นทุนตัดแต่ละขอบกำหนดไว้ หาลำดับการตัดที่ให้ต้นทุนรวมน้อยที่สุด ตัวอย่าง: ต้นทุนรวมต่ำสุด = 65 โดยลำดับ: - ตัดแนวนอน cost 5: 0 + 5×1 = 5 - ตัดแนวตั้ง cost 5: 5 + 5×2 = 15 - ตัดแนวตั้ง cost 4: 15 + 4×2 = 23 - ตัดแนวนอน cost 3: 23 + 3×3 = 3

  7. จำนวนครั้งที่ตัดกระดานหมากรุกได้มากที่สุดโดยไม่แยกเป็น 2 ส่วนใน C++

    แนวคิด กำหนดกระดานหมากรุก A×B หาจำนวนครั้งสูงสุดที่สามารถ ตัด (Cut) ได้ โดยที่กระดานไม่ถูกแบ่งออกเป็น 2 ส่วน ตัวอย่าง: - A=2, B=2 → 1 ครั้ง - A=2, B=4 → 3 ครั้ง สังเกตได้ว่า: จำนวนครั้งตัดสูงสุด = (A-1) × (B-1) ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; int numberOfCuts

  8. ขอบต่ำสุดที่ต้องเพิ่มเพื่อสร้าง Euler Circuit ใน C++

    แนวคิด กำหนดกราฟไม่มีทิศทาง b โหนด a ขอบ หาจำนวนขอบน้อยที่สุดที่ต้องเพิ่มเพื่อให้มี Euler Circuit (วงจรที่ผ่านทุกขอบ 1 ครั้ง) เงื่อนไข Euler Circuit: ทุกโหนดต้องมี degree เป็นเลขคู่ วิธีการแก้ปัญหา 2 กรณี: 1. กราฟเป็น 1 connected component ถ้าทุกโหนด degree คู่ → มี Euler Circuit แล้ว (เพิ่ม 0 ข

  9. การลบสมาชิกน้อยที่สุดจากอาร์เรย์เพื่อทำให้ GCD เพิ่มขึ้นใน C++

    แนวคิด GCD เริ่มต้นของ N ตัวเลข หากไม่สามารถเพิ่ม GCD ได้ พิมพ์ NO 3 → ลบ 2 ตัว วิธีการแก้ปัญหา หา GCD เริ่มต้นของทั้ง N ตัว หารทุกตัวด้วย GCD เริ่มต้น Prime factorization ทุกตัว (ใช้ Sieve + SPF - Smallest Prime Factor) นับความถี่ของแต่ละเฉพาะตัว (นับ unique ต่อตัวเลข) หาเฉพาะตัวที่ปรากฏมากที่

  10. หาคู่จากอาร์เรย์ที่ให้ค่า nCr สูงสุดใน C++

    แนวคิด กำหนดอาร์เรย์ arr[] ของจำนวนเต็มบวก n ตัว หาคู่ arr[i], arr[j] ที่ทำให้ nCr = arr[i]Carr[j] มีค่าสูงสุด nCr → เลือก n = max(arr) - nCr = nC(n-r) → ค่าสูงสุดอยู่ที่ r ≈ n/2 - n คี่: max ที่ n/2 และ n/2+1 - n คู่: max ที่ n/2 วิธีการแก้ปัญหา เรียงอาร์เรย์, ให้ N = ค่าสูงสุด ถ้า N คี่: ห

  11. หา LCA ใน Binary Tree ด้วย RMQ (Range Minimum Query) ใน C++

    แนวคิด Lowest Common Ancestor (LCA) ของโหนด a และ b ใน rooted tree T คือโหนดที่อยู่ห่างจากรากมากที่สุด ที่มีทั้ง a และ b เป็น descendants วิธีการ: ลดปัญหา LCA ให้กลายเป็น RMQ (Range Minimum Query) โดยใช้ Euler Tour ของต้นไม้ ขั้นตอนการแก้ปัญหา ทำ Euler Tour (DFS preorder) บันทึก: eul

  12. หา Complete Subtree ใหญ่ที่สุดใน Binary Tree ใน C++

    แนวคิด Complete Binary Tree: ทุกระดับเต็มยกเว้นระดับสุดท้าย และโหนดชิดซ้ายสุด Perfect Binary Tree เป็น Complete เสมอ แต่กลับไม่จริง โจทย์: หาขนาดของ Complete Subtree ใหญ่ที่สุดใน Binary Tree ที่กำหนด วิธีการแก้ปัญหา Traverse แบบ Bottom-up ส่งข้อมูลจากลูกขึ้นมาหา parent: bool isPerfect: subtree นี

  13. หาเลขยกกำลังสามมากที่สุดจากการลบหลักของตัวเลขใน C++

    แนวคิด กำหนดตัวเลข N ต้องการหาเลขยกกำลังสาม (Perfect Cube) ที่ใหญ่ที่สุดที่สามารถสร้างได้จากการลบหลักตัวเลขออก (อาจลบ 0 หลัก) จากตัวเลขเดิม Perfect Cube คือ A = B³ สำหรับจำนวนเต็ม B ตัวอย่าง: - N = 1025 → ลบ 0 ได้ 125 = 5³ - N = 806 → ลบ 0,6 ได้ 8 = 2³ - ถ้าไม่มี → -1 วิธีการแก้ปัญหา สร้างทุก sub

  14. ตรวจสอบวงเล็บสมดุล O(1) space O(N²) time ใน C++

    แนวคิด กำหนดสตริง str ประกอบด้วย (, ), {, }, [, ] ต้องการตรวจสอบว่าวงเล็บสมดุลหรือไม่ โดยใช้พื้นที่ O(1) และเวลา O(N²) วงเล็บสมดุลหมายถึง: วงเล็บเปิดต้องปิดด้วยประเภทเดียวกัน และเรียงลำดับถูกต้อง วิธีการแก้ปัญหา ใช้ตัวแปร a, b ติดตามตำแหน่งวงเล็บเปิด-ปิดที่กำลังเปรียบเทียบ นับ count: เพิ่มเมื่อเจ

  15. ตรวจสอบว่า Binary Tree สมดุลแบบ Red-Black Tree หรือไม่ใน C++

    แนวคิด ใน Red-Black Tree ความสูงสูงสุดของโหนดไม่เกิน 2 เท่าของความสูงต่ำสุด สำหรับ Binary Search Tree ที่กำหนด ต้องตรวจสอบว่า: สำหรับทุกโหนด ความยาวเส้นทางจากโหนดไปยัง leaf ที่ไกลที่สุด ≤ 2 × เส้นทางที่สั้นที่สุด วิธีการแก้ปัญหา สำหรับแต่ละโหนด ต้องหาความสูงสูงสุด (maxh) และต่ำสุด (minh) แล้วเปรียบ

  16. ตรวจสอบว่า Binary Tree เป็น Heap หรือไม่ใน C++

    แนวคิด Binary Tree เป็น Heap (Max-Heap) ต้องผ่าน 2 เงื่อนไข: Complete Binary Tree: ทุกระดับเต็มยกเว้นระดับสุดท้าย และโหนดชิดซ้ายสุด Heap Property: ค่าของโหนดทุกตัว ≥ ค่าลูกของมัน วิธีการแก้ปัญหา isCompleteUtil(): ตรวจสอบความสมบูรณ์ด้วย index (root=0, left=2i+1, right=2i+2) หาก index ≥ จำนวนโหนด

  17. ตรวจสอบว่ากราฟเป็น Bipartite ด้วย DFS ใน C++

    โจทย์ กำหนดกราฟเชื่อมต่อ (connected graph) ต้องการตรวจสอบว่ากราฟเป็น Bipartite หรือไม่ คือสามารถระบายสีโหนดด้วย 2 สีได้โดยโหนดที่ติดกันต้องมีสีต่างกัน ขั้นตอนการแก้ปัญหา ฟังก์ชัน insert_edge(): เพิ่มขอบ u-v ใน adjacency list (แบบไม่มีทิศทาง) ฟังก์ชัน is_bipartite_graph(): DFS แบบ recursive

  18. ตรวจสอบว่าสตริงเป็นตัวเลขที่ถูกต้องหรือไม่ใน C++

    แนวคิด ตรวจสอบว่าสตริงที่กำหนดเป็นตัวเลขที่ถูกต้อง (numeric) หรือไม่ ตัวอย่าง: - 12.5 → true - def → false - 2e5 → true - 10e4.4 → false กรณีที่ต้องจัดการ ข้าม whitespace นำหน้าและท้ายสตริง ข้าม +, -, . ที่ต้นสตริง ตัวอักษรต้องอยู่ในเซต {+, -, ., e, 0-9} เท่านั้น ไม่มี . หลัง e . ต้องตามด้วยตัวเล

  19. ตรวจสอบว่าคีย์มีในทุกเซ็กเมนต์ขนาด K ของอาร์เรย์หรือไม่ใน C++

    แนวคิด กำหนดอาร์เรย์ arr[] ขนาด N, คีย์ X, และขนาดเซ็กเมนต์ K ต้องการตรวจสอบว่าคีย์ X ปรากฏในทุกเซ็กเมนต์ขนาด K ของอาร์เรย์หรือไม่ ตัวอย่าง: - arr = {4, 6, 3, 5, 10, 4, 2, 8, 4, 12, 13, 4}, X=4, K=3 → Yes (4 เซ็กเมนต์: {4,6,3}, {5,10,4}, {2,8,4}, {12,13,4} ทุกเซ็กมี 4) - arr = {6, 9, 8, 13, 15, 4,

  20. ตรวจสอบว่าราชาเดินได้หรือไม่เมื่อมีหลังม้าบนกระดานหมากรุกใน C++

    แนวคิด กำหนดกระดานหมากรุกขนาดอันนิยต มี N ตัวม้า (Knight) และตำแหน่งของราชา (King) ต้องการตรวจสอบว่าราชาถูก เช็กเมต (Checkmate) หรือไม่ คือไม่สามารถเดินไปช่องใดๆ รอบๆ ได้ 8 ทิศทาง ตัวอย่าง: - ม้า: {(2,1), (1,3), (3,6), (5,5), (6,1), (7,3)}, ราชา: (4,3) → Yes (เช็กเมต) - ม้า: {(1,1)}, ราชา: (3,4) →

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:195/301  20-คอมพิวเตอร์/Page Goto:1 189 190 191 192 193 194 195 196 197 198 199 200 201