Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. เติม 1 ให้เต็มอาร์เรย์ด้วยจำนวนรอบน้อยที่สุดใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ที่มีแค่ 0 และ 1 ทางเราต้อง หาจำนวนรอบน้อยที่สุดในการเติม 1 ให้เต็มอาร์เรย์ โดยที่ 1 สามารถเปลี่ยนเพื่อนบ้านซ้ายและขวาเป็น 1 ได้ในหนึ่งรอบ ตัวอย่าง Input: arr[] = {0, 1, 1, 0, 0, 1} Output: 1 แนวทางแก้ปัญหา วิเคราะห์เป็นบล็อก (Blocks) ที่แบ่งด้วย 1: Case 1: รอบ = ceil

  2. หาความสูงของ Binary Tree ที่แทนด้วย Parent Array ใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ขนาด n ที่แทนต้นไม้ (Parent Array) โดย arr[i] = parent ของโหนด i (รูทมีค่า -1) ทางเราต้อง หาความสูงของ Binary Tree แนวทางแก้ปัญหา วิธีที่มีประสิทธิภาพ (O(n)): คำนวณความลึก (Depth) ของแต่ละโหนดด้วย Memoization (DP) สร้างอาร์เรย์ nodeDepth[] เริ่มต้น 0 ฟังก์ชัน findAll

  3. ตรวจสอบว่าเลขหารทุกรายการในลิสต์ลงตัวใน C++

    โจทย์ ได้รับลิสต์ตัวเลขและตัวเลข num ทางเราต้อง ตรวจสอบว่า num หารทุกตัวในลิสต์ลงตัวหรือไม่ ตัวอย่าง Input: list[] = {4, 10, 6, 5, 9}, num = 5 Output: No (4,6,9 หาร 5 ไม่ลงตัว) แนวทางแก้ปัญหา วนลูปตรวจสอบ list[i] % num == 0 สำหรับทุก i ถ้ามีตัวใดไม่หารลงตัว คืน false ทันที โปรแกรมตัวอย่าง #includ

  4. ตรวจสอบว่าสตริงเริ่มและจบด้วยสตริงอีกตัวหนึ่งใน C++

    โจทย์ ได้รับสตริง str และ conStr ทางเราต้อง ตรวจสอบว่า str เริ่มและจบด้วย conStr หรือไม่ ตัวอย่าง Input: str = abcProgrammingabc, conStr = abc Output: True แนวทางแก้ปัญหา ถ้าความยาว str false ตรวจสอบ prefix ขนาด conStr.length() เท่ากับ conStr ตรวจสอบ suffix ขนาด conStr.length() เท่ากับ con

  5. ตรวจสอบว่าอาร์เรย์มีสมาชิกที่มีค่าเท่ากับครึ่งหนึ่งของผลรวมทั้งอาร์เรย์ใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ที่เรียงแล้วและไม่ซ้ำ ทางเราต้อง ตรวจสอบว่ามีสมาชิก x ที่ 2*x = ผลรวมทั้งอาร์เรย์ หรือไม่ ตัวอย่าง Input: arr[] = {2, 4, 5, 6, 7} Output: No อธิบาย: ผลรวม = 24, ไม่มีตัวเลขไหนคูณ 2 ได้ 24 แนวทางแก้ปัญหา หาผลรวมทั้งอาร์เรย์ ไม่มีคำตอบ หา sum/2 ด้วย Binary Search

  6. ตรวจสอบว่าเมทริกซ์เป็น Toeplitz หรือไม่ใน C++

    โจทย์ ได้รับเมทริกซ์ 2D สี่เหลี่ยมจัตุรัส mat[][] ขนาด n x n ทางเราต้อง ตรวจสอบว่าเป็นเมทริกซ์ Toeplitz (Diagonal Matrix) หรือไม่ Toeplitz Matrix: ทุกเส้นทแยงมุมจากซ้ายบนไปขวาล่างมีค่าเท่ากัน ตัวอย่าง Input: Mat = {{3,5,1}, {4,3,2}, {1,2,3}} Output: Yes (เส้นทแยงหลักคือ 3,3,3) แนวทางแก้ปัญหา 0 ต้อ

  7. ตรวจสอบว่าเลขที่กำหนดเป็นผลรวมของ n จำนวนธรรมชาติแรกหรือไม่ใน C++

    โจทย์ ได้รับตัวเลข num ทางเราต้อง ตรวจสอบว่า num เป็นผลรวมของ n จำนวนธรรมชาติแรกหรือไม่ (คือ num = n(n+1)/2) ตัวอย่าง Input: num = 55 Output: yes, 10 (เพราะ 1+2+...+10 = 55) แนวทางแก้ปัญหา วิธี 1: วนลูปสะสม บวก 1,2,3... จนกว่าจะ ≥ num วิธี 2: สูตรกำลังสอง (เร็วกว่า) แก้สมการ n^2 + n - 2*num = 0 n

  8. ตรวจสอบว่าหมุนหน้ากระดาษได้หรือไม่จากจุด 3 จุดใน C++

    โจทย์ ได้รับพิกัด 3 จุด x, y, z บนหน้ากระดาษ ทางเราต้อง ตรวจสอบว่าสามารถหมุนหน้ากระดาษได้หรือไม่ ทำให้ตำแหน่งใหม่ของ x = ตำแหน่งเก่าของ y, y = z ตัวอย่าง Input: x=(0,1), y=(1,0), z=(0,-1) Output: Yes อธิบาย: หมุน 90 องศาได้ แนวทางแก้ปัญหา เงื่อนไขที่สามารถหมุนได้: ระยะห่างระหว่าง x และ y เท่ากั

  9. ตรวจสอบการจองห้องพัก K ห้องได้หรือไม่จากเวลาเข้า-ออกใน C++

    โจทย์ ได้รับอาร์เรย์เวลาเข้า (arrival) และเวลาออก (departure) ขนาด N และจำนวนห้อง k ทางเราต้อง ตรวจสอบว่าสามารถจองได้หรือไม่โดยไม่ให้เกิน k ห้องพร้อมกัน ตัวอย่าง Input: Arrivals = {1,4,5,7}, Departures = {3,5,6,9}, K = 1 Output: Yes แนวทางแก้ปัญหา วิธี 1: Event Timeline (Sweep Line) สร้างอาร์เร

  10. ตรวจสอบคู่ในเส้นทางรูทถึงใบที่ผลรวมเท่ากับค่ารูทใน C++

    โจทย์ ได้รับ Binary Tree ทางเราต้อง ตรวจสอบว่ามีคู่โหนดในเส้นทางจากรูทถึงใบ (Root-to-leaf path) ที่ผลรวมเท่ากับค่าของรูทหรือไม่ ตัวอย่าง Input: ต้นไม้ดังภาพ (รูท=7, มีคู่ (2,5) และ (1,6)) Output: Yes แนวทางแก้ปัญหา ใช้ DFS พร้อม Hash Set: ท่องต้นไม้จากรูทลงไป เก็บค่าของโหนดที่ผ่านมาใน Hash Se

  11. ตรวจสอบว่ามีซับอาร์เรย์ผลรวมเป็น 0 ใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ทางเราต้อง ตรวจสอบว่ามีซับอาร์เรย์ (Subarray) ที่ผลรวมเป็น 0 หรือไม่ ตัวอย่าง Input: arr[] = {3, 1, -2, 1, 4, 5} Output: Yes อธิบาย: ซับอาร์เรย์ {1, -2, 1} ผลรวม = 0 แนวทางแก้ปัญหา ใช้ Hashing (Prefix Sum): คำนวณ Prefix Sum ขณะท่องอาร์เรย์ มีซับอาร์เรย์ผลรวม 0 เก

  12. ตรวจสอบว่ามีซับเซ็ตขนาด K ผลรวมเป็น 0 ในอาร์เรย์ -1 และ +1 ใน C++

    โจทย์ ได้รับอาร์เรย์ที่มีแค่ -1 และ +1 และจำนวน k ทางเราต้อง ตรวจสอบว่ามีซับเซ็ตขนาด k ที่ผลรวมเป็น 0 หรือไม่ ตัวอย่าง Input: arr[] = {-1, 1, -1, -1, 1, 1, -1}, k = 4 Output: YES อธิบาย: ซับเซ็ต {-1, 1, -1, 1} ผลรวม = 0 แนวทางแก้ปัญหา k ต้องเป็นเลขคู่ นอกจากนี้ ต้องมี -1 และ +1 เพียงพอในอาร์เรย์

  13. ตรวจสอบว่าสองคนจะพบกันได้หรือไม่หลังกระโดดเท่ากันครั้งใน C++

    โจทย์ ได้รับจุดเริ่มต้น p1, p2 และระยะกระโดด j1, j2 ทางเราต้อง ตรวจสอบว่าสองคนจะพบกันได้หรือไม่หลังจากกระโดดจำนวนครั้งเท่ากัน ตัวอย่าง Input: p1=5, p2=9, j1=4, j2=2 Output: Yes อธิบาย: พบกัน แนวทางแก้ปัญหา เงื่อนไขการพบกัน: p2 ต้องมี j1 < j2 (คนหลังต้องกระโดดยาวกว่า) ระยะห่างต้องหารด้วยความต

  14. หาดัชนีของสมาชิกเพิ่มเติมในอาร์เรย์ที่เรียงแล้วใน C++

    โจทย์ ได้รับอาร์เรย์ที่เรียงแล้ว 2 อัน arr1 (ขนาด n) และ arr2 (ขนาด n+1) เหมือนกันทุกตัวยกเว้น 1 ตัว ทางเราต้อง หาดัชนีของสมาชิกเพิ่มเติมใน arr2 ตัวอย่าง Input: arr1 = {3,5,7,8,9,12}, arr2 = {3,4,5,7,8,9,12} Output: 1 (ค่าที่ดัชนี 1 คือ 4) แนวทางแก้ปัญหา วิธี 1: Linear Search เปรียบเทียบคู่ต่อคู่

  15. หาตัวเลขที่หารสมาชิกในอาร์เรย์ได้มากที่สุดใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ทางเราต้อง หาตัวเลขที่หารสมาชิกในอาร์เรย์ได้มากที่สุด (ถ้ามีหลายตัว ให้ตัวเล็กกว่า) ตัวอย่าง Input: arr[] = {4, 5, 6, 7, 8} Output: 2 อธิบาย: 2 หาร 4, 6, 8 ได้ (3 ตัว) แนวทางแก้ปัญหา ใช้ Sieve of Eratosthenes หาตัวประกอบเฉพาะ (Prime Factors) ของทุกตัวในอาร์เรย์ นับความถี

  16. หา K รายการที่มีค่าต่ำสุดใน C++

    โจทย์ ได้รับรายการที่มีคู่ (Item, Value) และจำนวน k ทางเราต้อง หา K รายการที่มีค่าต่ำสุด ตัวอย่าง Input: items = {{item1,200}, {item2,100}, {item3,500}, {item4,400}}, k = 2 Output: item2, item1 (เรียงตามค่า) แนวทางแก้ปัญหา เรียงรายการตามค่า (Value) จากน้อยไปมาก แล้วเลือก k ตัวแรก โปรแกรมตัวอย่าง

  17. หา k ตัวเลขสูงสุดในอาร์เรย์ตามลำดับเดิมใน C++

    โจทย์ ได้รับอาร์เรย์ arr[] ขนาด n ทางเราต้อง หา k ตัวเลขสูงสุด แต่แสดงตามลำดับเดิมในอาร์เรย์ ตัวอย่าง Input: arr[] = {5, 1, 3, 6, 2}, k = 2 Output: 5, 6 อธิบาย: ตัวเลขใหญ่สุด 2 ตัวคือ 6 และ 5 แต่ 5 อยู่ก่อน 6 ในอาร์เรย์เดิม แนวทางแก้ปัญหา สร้างอาร์เรย์สำเนา เรียงจากมากไปน้อย (decArr) ท่องอาร์

  18. หาเลขที่ k-th น้อยที่สุดใน n ช่วง (Ranges) ใน C++

    โจทย์ ได้รับ n ช่วงตัวเลข และจำนวน k ทางเราต้อง หาเลขที่ k-th น้อยที่สุดจากชุดตัวเลขที่รวมจากทุกช่วง ตัวอย่าง Input: ranges = {{2,5}, {7,9}, {12,15}}, k = 9 Output: 13 อธิบาย: ตัวที่ 9 คือ 13 แนวทางแก้ปัญหา วิธีแบบง่าย: สร้างอาร์เรย์รวมจากทุกช่วง (อยู่แล้วเรียง) แล้วหาตัวที่ k-1 หมายเหตุ: วิธีนี้ใ

  19. หาโหนดที่ k จากกลางไปหาหัวของ Linked List ใน C++

    โจทย์ ได้รับ Linked List และจำนวน k ทางเราต้อง หาโหนดที่ k จากโหนดกลาง (Middle) ไปทางหัว (Head) ตัวอย่าง Input: 4→2→7→1→9→12→8→10→5, k = 2 Output: 7 อธิบาย: โหนดกลางคือ 9, โหนดที่ 2 จากกลางไปหัวคือ 7 แนวทางแก้ปัญหา นับจำนวนโหนดทั้งหมด n โหนดกลางอยู่ตำแหน่ง n/2 + 1 (1-indexed) โหนดที่ k จากก

  20. หาเลขที่ k-th น้อยที่สุดในช่วง [1, n] หลังลบเลขคี่ใน C++

    โจทย์ ได้รับ n และ k ทางเราต้อง หาเลขที่ k-th น้อยที่สุดในช่วง [1, n] ที่เหลือเฉพาะเลขคู่ ตัวอย่าง Input: n = 12, k = 4 Output: 8 อธิบาย: ตัวที่ 4 คือ 8 แนวทางแก้ปัญหา เลขคู่ลำดับที่ k คือ 2*k (ตราบใดที่ 2*k ≤ n) โปรแกรมตัวอย่าง 2*k) cout << kth smallest number is << (2 * k)

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:247/301  20-คอมพิวเตอร์/Page Goto:1 241 242 243 244 245 246 247 248 249 250 251 252 253