Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Balance a Binary Search Tree ใน C++ : ทำให้ BST สมดุล (Height-Balanced)

    ให้ **Binary Search Tree (BST)** แปลงเป็น **Height-Balanced BST** (ความสูง Left/Right Subtree ของทุก Node ต่างกัน ≤ 1) ค่า Node เหมือนเดิม ถ้าหลายคำตอบ คืนอันไหนก็ได้ ตัวอย่าง Input BST (Skewed): 1 \ 2 \ 3 \ 4 Balanced BST (หนึ่งรูปแบบ): 2 / \ 1 3 \

  2. Sort Integers by The Power Value ใน C++ : เรียงลำดับตาม Power Value (Collatz Steps)

    Power Value** ของจำนวน x = จำนวนขั้นตอน (Steps) ในการทำให้ x กลายเป็น 1 ตามกติกา Collatz: x even x = x / 2 x odd x = 3*x + 1 ให้ Range [lo, hi] และ k เรียงจำนวนใน Range ตาม **Power Value 昇序 (น้อยไปมาก)** ถ้า Power เท่ากัน เรียงตาม **ค่าตัวเลข 昇序** หา **ตัวเลขลำดับที่ k** ตัวอย่าง lo=12, hi=15, k

  3. Four Divisors ใน C++ : หาผลรวมตัวหารของจำนวนที่มีตัวหาร 4 ตัว

    ให้ Array nums Return 0 ตัวอย่าง nums = [21, 4, 7] Sum = 32 3 ตัว 2 ตัว Output: 32 (Sum ของตัวหาร 21 เท่านั้น) แนวทาง: Factorization + Counting Divisors สำหรับแต่ละ x ใน Array: Initialize sum = 1 + x, count = 2 (1 และ x เอง) Loop i = 2 .. sqrt(x): ถ้า x % i == 0: sum += i, count++ ถ้า i !

  4. Convert Sorted List to Binary Search Tree ใน C++ : แปลง Linked List เรียงเป็น Height-Balanced BST

    ให้ **Singly Linked List** เรียงจากน้อยไปมาก แปลงเป็น **Height-Balanced BST** (ความสูง Subtree ทุก Node ต่างกัน ≤ 1) ตัวอย่าง 9 BST (หนึ่งในคำตอบที่เป็นไปได้): 0 / \ -3 5 / \ -10 9 Inorder: -10 -3 0 5 9 (ตรงกับ List) แนวทาง: Divide & Conquer + Find Middle (Fas

  5. Reverse Words in a String ใน C++ : กลับลำดับคำในประโยค

    ให้ String s มีหลายคำ (คั่นด้วย Space) กลับ **ลำดับคำ** (ไม่ใช่กลับตัวอักษรในคำ) และจัดการ Space ให้ถูกต้อง (ไม่มี Leading/Trailing/Multiple Spaces) ตัวอย่าง Input: The quick brown fox jumps over a lazy dog Output: dog lazy a over jumps fox brown quick The แนวทาง: Two-Pass Reverse (In-Place Styl

  6. Nth Digit ใน C++ : หาตัวเลขหลักที่ N ในลำดับจำนวนเต็มต่อเนื่อง

    ให้ลำดับจำนวนเต็มต่อเนื่อง: 1234567891011121314... หา **Digit ตำแหน่งที่ n** (1-indexed) ตัวอย่าง n = 11 Sequence: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 ... Index: 1 2 3 4 5 6 7 8 9 10 11 Digit 11 คือ 0 (ของเลข 10) แนวทาง: Digit Length Groups (Mathematical) จัดกลุ่มตามจำนวนหลัก (Digit Length): 9 ต

  7. Remove K Digits ใน C++ : ลบ K หลักเพื่อให้ได้ตัวเลขน้อยที่สุด

    ให้ String num แทนจำนวนเต็มบวก และ Integer k ลบ **k หลัก** ออกจาก num ให้ได้ **ตัวเลขที่น้อยที่สุด** (เป็น String, ไม่มี Leading Zeros) ตัวอย่าง num = 1432219, k = 3 เหลือ 1219 Output: 1219 อัลกอริทึม: Monotonic Stack (Greedy) หลักการ: **ลบหลักที่ใหญ่กว่าหลักถัดไป** (Peak) เพื่อให้ตัวเลขเล็กลงมา

  8. Arithmetic Slices ใน C++ : นับ Slice ที่เป็น Arithmetic Sequence

    โจทย์จริงของเนื้อหานี้คือ Arithmetic Slices** (Title Remove K Digits ผิดพลาด เนื้อหาเป็น Arithmetic Slices) ให้ Array A หาจำนวน **Arithmetic Slices** คือ Subarray ความยาว ≥ 3 ที่ **ความต่างระหว่าง Adjacent Elements คงที่** ตัวอย่าง A = [1,2,3,4] Arithmetic Slices: [1,2,3], [2,3,4], [1,2,3,4] 3 Sli

  9. Sentence Screen Fitting ใน C++ : นับจำนวนครั้งที่วางประโยคบนหน้าจอได้

    ให้หน้าจอขนาด rows x cols และ **Sentence** (Array ของ Words) หาว่า **วางประโยคซ้ำได้กี่รอบเต็ม** ตามกติกา: Word **ไม่ตัดข้ามบรรทัด** (ต้องอยู่บรรทัดเดียวกันหมด) ลำดับ Word **ต้องคงเดิม** วนซ้ำ Word ระหว่างกัน **เว้น Space 1 ช่อง** ตัวอย่าง rows=3, cols=6, sentence=[a, bcd, e] Row 1: a bcd (le

  10. Find Right Interval ใน C++ : หา Interval ที่เริ่มต้นขวาสุด

    ให้ Array ของ **Intervals** intervals[i] = [start, end] สำหรับแต่ละ Interval i หา **Index j** ที่: = intervals[i][1] (Start ของ j อยู่ขวา/เท่ากับ End ของ i) intervals[j][0] **น้อยที่สุด** ที่สatisfy เงื่อนไข (Right-most interval ที่เริ่มต้นเร็วที่สุด) -1 ตัวอย่าง 1 Output: [-1, 0, 1] แนวทาง

  11. Ternary Expression Parser ใน C++ : แปลงนิพจน์ Ternary Nested ให้เป็นค่า

    ให้ String แทน **Ternary Expression แบบ Nested** ประกอบด้วย 0-9, ?, :, T, F (T=True, F=False) คำนวณค่าของ Expression กฎ: Group Right-to-Left (Right Associative) Condition จะเป็น T หรือ F เท่านั้น (ไม่ใช่ Digit) Result จะเป็น Digit, T, หรือ F ตัวอย่าง F?1:T?4:5 Parse ขวาสุด: T?4:5 Result 4 Expre

  12. 132 Pattern ใน C++ : หาลำดับย่อย ai < ak < aj

    ให้ Array nums หาว่ามี **132 Pattern** หรือไม่ คือ มี Index i < j < k ทำให้ nums[i] < nums[k] < nums[j] ตัวอย่าง [-1, 3, 2, 0] true Patterns: [-1, 3, 2], [-1, 3, 0], [-1, 2, 0] แนวทาง: Monotonic Stack + Prefix Min (O(N)) Precompute minVals[i] = Min value จาก nums[0..i] (ค่า ai ที่เล็กที่สุดทางซ้

  13. Can I Win ใน C++ : เกมเลือกตัวเลขไม่ซ้ำกันเพื่อให้ Sum >= Target

    เกม 100 Game แบบปรับเปลี่ยน: มีตัวเลข 1 ถึง maxChoosableInteger (ไม่ซ้ำ ไม่ได้เลือกซ้ำ) 2 ผู้เล่นสลับกันเลือก ตัวเลขที่เลือกจะบวกเข้า Running Total ผู้ที่ทำให้ Total ≥ desiredTotal **ชนะ** สมมติทั้งคู่เล่น **Optimal** หาว่า **Player 1 (First Player) ชนะได้หรือไม่** Constraints maxChoosableInteger

  14. Unique Substrings in Wraparound String ใน C++ : นับ Substring ที่อยู่ใน Infinite Wraparound String

    ให้ String s เป็น **Infinite Wraparound String** ของ Alphabet: ...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd... ให้ String p หาจำนวน **Unique Non-empty Substrings** ของ p ที่ **ปรากฏใน s** ตัวอย่าง p = zab Substrings ใน p ทั้ง 6 ตัวอยู่ใน s (เพราะเป็น רצף Alphabet ต่อเนื่อง) Output:

  15. Convex Polygon ใน C++ : ตรวจสอบรูปหลายเหลี่ยมคอนเว็กซ์

    ให้จุดหลายจุดที่ต่อกันเป็นรูปหลายเหลี่ยม (Simple Polygon - ไม่มีขอบตัดกัน) ตรวจสอบว่ารูปนี้เป็น **Convex Polygon (รูปหลายเหลี่ยมคอนเว็กซ์)** หรือไม่ นิยาม Convex: มุมภายในทุกมุม ≤ 180° หรือ **Cross Product ของ Vector ขอบติดกันทุกคู่ มีเครื่องหมายเดียวกัน** (ทั้งหมดบวก หรือทั้งหมดลบ) ตัวอย่าง Poin

  16. Before and After Puzzle ใน C++ : สร้างวลีต่อเนื่องจากคำสุดท้ายและคำแรก

    ให้ List ของ **Phrases** (วลี) แต่ละวลีประกอบด้วยตัวอักษรพิมพ์เล็กและ Space เท่านั้น ไม่มี Space นำหน้าหรือท้าย และไม่มี Space ซ้อนกัน Before and After Puzzle คือ วลีใหม่ที่เกิดจาก **ต่อวลี 2 วลี** โดยที่ **คำสุดท้ายของวลีแรก = คำแรกของวลีที่สอง** (Order matters: พิจารณาทั้ง (i,j) และ (j,i)) หา **D

  17. Shortest Distance to Target Color ใน C++ : หาระยะทางสั้นที่สุดไปยังสีเป้าหมาย

    ให้ Array colors มีค่า 1, 2, 3 (แทน 3 สี) และ Queries หลายคำถาม แต่ละ Query เป็น [index, targetColor] หา **ระยะทางสั้นที่สุด** จาก index ไปยังตำแหน่งที่มี targetColor ถ้าไม่มีสีนั้นเลย คืน -1 ตัวอย่าง 1 ใกล้สุดอยู่ Index 3 (ค่า 1) ระยะ 3 Output: [3, 0, 3] แนวทาง: Preprocess Index Positions + B

  18. การกลับสตริงระหว่างวงเล็บ (Reverse Substrings Between Each Pair of Parentheses) ใน C++

    ให้ String s ประกอบด้วยตัวอักษรพิมพ์เล็กและวงเล็บ () ต้อง **กลับลำดับตัวอักษรในแต่ละคู่วงเล็บ** เริ่มจาก **คู่ในสุด (Innermost)** และ **ผลลัพธ์ต้องไม่มีวงเล็บเหลือ** ตัวอย่าง Input: (hel(lowo)rld) วงเล็บในสุด: (lowo) owol String กลายเป็น (helowolrld) วงเล็บนอก: (helowolrld) dlrowoleh Output: dl

  19. Minimum Knight Moves ใน C++ : หาจำนวนขั้นตอนน้อยที่สุดของ Knight บนกระดานหมากรุกอนันต์

    โจทย์: กระดานหมากรุกขนาดอนันต์ (-∞ ถึง +∞) Knight เริ่มที่ [0, 0] หา **จำนวนขั้นตอนน้อยที่สุด** เพื่อไปถึง [x, y] (รับประกันว่ามีคำตอบ) Knight เดินได้ 8 ทิศ: (±2, ±1) และ (±1, ±2) ตัวอย่าง x = 5, y = 5 Output: 4 Path: [0,0] → [2,1] → [4,2] → [3,4] → [5,5] แนวทาง: DFS + Memoization (DP บน Grid) เน

  20. หาตัวเลขร่วมน้อยที่สุดในทุกแถวของ Matrix (Find Smallest Common Element in All Rows) ใน C++

    ให้ Matrix mat ที่ **ทุกแถวเรียงจากน้อยไปมาก (Non-decreasing)** หา **ตัวเลขที่เล็กที่สุดที่ปรากฏในทุกแถว** ถ้าไม่มีให้คืน -1 ตัวอย่าง Matrix: [1, 2, 3, 4, 5] [2, 4, 5, 8, 10] [3, 5, 7, 9, 11] [1, 3, 5, 7, 9] Output: 5 (5 อยู่ในทุกแถว และเป็นตัวเล็กที่สุดที่ทำได้) แนวทาง: Hash Map + เงื่อนไขคว

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:152/301  20-คอมพิวเตอร์/Page Goto:1 146 147 148 149 150 151 152 153 154 155 156 157 158