Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Maximum Sum Subarray Having Sum ≤ Given Sum ใน C++

    ภาพรวมปัญหา มีอาร์เรย์และค่า sum ที่กำหนด หา Subarray ที่มีผลรวม ≤ sum ที่กำหนด และผลรวมมากที่สุด ตัวอย่าง: [3,5,1,8,2,9], sum=25 → Output: 25 (subarray {5,1,8,2,9}) อัลกอริทึม (Sliding Window) sum = arr[0], overallMax = 0, start = 0 for i = 1 ถึง n-1: ถ้า sum ≤ maxSum: overallMax = max(over

  2. Maximum Sum Subarray Removing At Most One Element ใน C++

    ภาพรวมปัญหา มีอาร์เรย์ ต้องหาผลรวมสูงสุดของ Subarray โดยอนุญาตให้ลบสูงสุด 1 องค์ประกอบ ตัวอย่าง: [5, 1, 9, 2, -1, 7] → ลบ -1 ได้ผลรวม 24 วิธีแก้ปัญหา (Kadanes Algorithm แบบปรับเปลี่ยน) คำนวณ startSum[i] = max subarray sum สิ้นสุดที่ i (จากซ้าย) คำนวณ endSum[i] = max subarray sum เริ่มต้นที่ i (จา

  3. Permutations II - หาการเรียงสับทั้งหมด (รองรับค่าซ้ำ) ใน C++

    ภาพรวมปัญหา มีชุดจำนวนเต็ม (อาจซ้ำ) หา Permutations ทั้งหมดที่ไม่ซ้ำกัน ตัวอย่าง: [1,1,3] → [[1,1,3], [1,3,1], [3,1,1]] อัลกอริทึม (Recursive Backtracking + Skip Duplicates) เรียงลำดับอาร์เรย์ก่อน ฟังก์ชัน solve(nums, idx): ถ้า idx == size: เพิ่ม nums เข้า res, return for i = idx ถึง size-

  4. Spiral Matrix - พิมพ์เมทริกซ์แบบเกลียวใน C++

    ภาพรวมปัญหา พิมพ์สมาชิกเมทริกซ์แบบเกลียว: แถวแรกซ้าย→ขวา, คอลัมน์สุดท้ายบน→ล่าง, แถวสุดท้ายขวา→ซ้าย, คอลัมน์แรกล่าง→บน, ทำซ้ำ ตัวอย่าง 123456 789101112 131415161718 Output: 1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11 15 16 อัลกอริทึม currRow = 0, currCol = 0 while currRow < m และ currCol < n:

  5. Partition List - แบ่ง Linked List ตามค่า x ใน C++

    ภาพรวมปัญหา มี Linked List และค่า x ต้องจัดเรียงใหม่ให้โหนดที่น้อยกว่า x อยู่หน้า โหนดที่มากกว่าหรือเท่า x อยู่หลัง รักษาลำดับเดิมในแต่ละกลุ่ม ตัวอย่าง: [1,4,3,2,5,2], x=3 → [1,2,2,4,3,5] อัลกอริทึม (Two Dummy Lists) สร้าง dummy1, dummy2 (ค่า -1), dp1, dp2 ชี้ไปที่ dummy1, dummy2 while a ไม่ใช่ n

  6. Gray Code - รหัสเกรย์ใน C++

    ภาพรวมปัญหา Gray Code เป็นระบบเลขฐานสองที่ค่าติดกันต่างกันแค่ 1 บิต กำหนด n บิต ต้องสร้างลำดับ Gray Code เริ่มจาก 0 ตัวอย่าง: n=2 → [0,1,3,2] (00, 01, 11, 10) สูตรการแปลง 1) ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout <

  7. Binary Tree Level Order Traversal - การท่องระดับใน C++

    ภาพรวมปัญหา ท่อง Binary Tree แบบ Level Order (BFS) - ระดับต่อระดับ จากซ้ายไปขวา ตัวอย่าง: [10, 5, 16, 8, 15, 20, 23] อัลกอริทึม (Queue) สร้าง queue, ใส่ root เข้าไป while queue ไม่ว่าง: item = pop front พิมพ์ค่า item ถ้ามี left child → push เข้า queue ถ้ามี right child → push เข้า queu

  8. Minimum Path Sum ใน Triangle - หาผลรวมเส้นทางน้อยที่สุดในสามเหลี่ยมใน C++

    ภาพรวมปัญหา มีสามเหลี่ยมตัวเลข หาผลรวมเส้นทางน้อยที่สุดจากยอดถึงฐาน เคลื่อนที่ได้เฉพาะลงซ้ายหรือลงขวา ตัวอย่าง [ [2], [3,4], [6,5,7], [4,1,8,3] ] Output: 11 (2+3+5+1) อัลกอริทึม (DP Bottom-up) dp = คัดลอกแถวสุดท้ายของสามเหลี่ยม for i = n-2 ถึง 0 (ขึ้นมาจากแถวก่อนสุดท้าย): for j = 0

  9. Palindrome Partitioning - หาจำนวนการตัดน้อยที่สุดให้เป็นพาลินโดรมใน C++

    ภาพรวมปัญหา มีสตริง ต้องหาจำนวนการตัด (cuts) น้อยที่สุด เพื่อให้ทุกส่วนเป็นพาลินโดรม ตัวอย่าง: ababbbabbababa → 3 cuts (a | babbbab | b | ababa) อัลกอริทึม (Dynamic Programming) n = ความยาวสตริง สร้างตาราง cut[n][n] และ pal[n][n] (pal[i][j] = true ถ้า s[i..j] เป็นพาลินโดรม) ฐาน: pal[i][i] = true,

  10. Gas Station - หาจุดเริ่มต้นเดินรถวนครบวงจรใน C++

    ภาพรวมปัญหา มีสถานีน้ำมัน n แห่งเรียงเป็นวงกลม แต่ละสถานีมีน้ำมันและระยะทางไปสถานีถัดไป หาจุดเริ่มต้นที่รถขับวนครบวงจรได้ (1 หน่วยน้ำมัน = 1 หน่วยระยะทาง) ตัวอย่าง stations = [(4,6), (6,5), (7,3), (4,5)] Output: start = 1 (สถานีที่ 2) อัลกอริทึม (Queue / Two Pointers) ใช้แนวคิด Queue เก็บสถานีในท

  11. Evaluate Reverse Polish Notation - คำนวณนิพจน์ Postfix ใน C++

    ภาพรวมปัญหา คำนวณค่าของนิพจน์ Reverse Polish Notation (Postfix) โดยใช้ Stack ตัวอย่าง: 53+62/*35*+ → 39 อัลกอริทึม อ่านตัวอักษรทีละตัว: ถ้าเป็นตัวเลข (operand) → push เข้า stack ถ้าเป็นตัวดำเนินการ (operator) → pop 2 ตัว (a, b), คำนวณ b ☉ a, push ผลลัพธ์ คำตอบอยู่ที่ top ของ stack ตั

  12. Valid Parenthesis String - ตรวจสอบวงเล็บสมดุลใน C++

    ภาพรวมปัญหา ตรวจสอบนิพจน์ที่มีวงเล็บ (), {}, [] ว่าสมดุล (balanced) หรือไม่ ตัวอย่าง: ()[(){()}] → Valid, {[}] → Invalid อัลกอริทึม (Stack) วนอ่านตัวอักษรทุกตัว: ถ้าเป็นวงเล็บเปิด (, {, [ → push เข้า stack ถ้าเป็นวงเล็บปิด ), }, ] → pop จาก stack ตรวจสอบว่าคู่ตรงกันหรือไม่ จบสตริงแล้วถ

  13. Combination Sum II - หาชุดที่ผลรวมเท่า Target (ไม่ซ้ำ) ใน C++

    ภาพรวมปัญหา มีชุดตัวเลข candidates (ไม่ซ้ำ) และ target หาชุดย่อย (combinations) ที่ผลรวมเท่า target แต่ละตัวเลือกได้สูงสุด 1 ครั้ง ตัวอย่าง: [2,3,6,7,8], target=8 → [[2,6],[8]] อัลกอริทึม (Backtracking + Sorting) เรียงลำดับ candidates ฟังก์ชัน solve(idx, a, b, temp): ถ้า b==0: เพิ่ม temp เข้

  14. Permutation Sequence - หาลำดับการเรียงสับที่ k ใน C++

    ภาพรวมปัญหา ชุด [1,2,3,...,n] มี n! การเรียงสับ (permutations) เรียงตามลำดับ หาลำดับที่ k (1-indexed) n ∈ [1,9], k ∈ [1, n!] ตัวอย่าง n=3: [123,132,213,231,312,321] k=4 → 231 อัลกอริทึม (Mathematical / Factorial Number System) สร้าง candidates = [1,2,...,n] คำนวณ factorial ล่วงหน้า fact[0..n] k-

  15. Rotate List - หมุน Linked List ไปทางขวา k ตำแหน่งใน C++

    ภาพรวมปัญหา มี Linked List ต้องหมุนไปทางขวา k ตำแหน่ง (k ≥ 0) ตัวอย่าง: [1,2,3,4,5], k=2 → [4,5,1,2,3] อัลกอริทึม ถ้าลิสต์ว่าง → return null นับความยาว len, หา tail node next = head (ทำให้เป็นวงกลม) k = k % len เดินจาก head ไป len-k ก้าว → ตำแหน่งก่อน head ใหม่ next = NULL return newHead ตัวอย่

  16. Unique Paths - นับเส้นทางที่ไม่ซ้ำในกริด (Python)

    ภาพรวมปัญหา หุ่นยนต์อยู่มุมซ้ายบนของกริด n×m เคลื่อนที่ได้แค่ขวาหรือลง หาจำนวนเส้นทางไปมุมขวาล่าง ตัวอย่าง Robo END m=3, n=2 → Output: 3 เส้นทาง อัลกอริทึม (Dynamic Programming) สร้างตาราง DP n×m เริ่มต้น -1 dp[n-2][m-1] = 1 เติมแถวสุดท้ายและคอลัมน์สุดท้าย = 1 เติมย้อนกลับ: dp[i][j] = dp[i+1][

  17. Unique Paths II - หาเส้นทางที่ไม่ซ้ำกันพร้อมอุปสรรคใน C++

    ภาพรวมปัญหา หุ่นยนต์อยู่มุมซ้ายบนของกริด n×m เคลื่อนที่ได้แค่ขวาหรือลง บางเซลล์เป็นอุปสรรค (1) หาจำนวนเส้นทางที่ไม่ซ้ำไปมุมขวาล่าง ตัวอย่าง Robo Obs END Grid: [[0,0,0],[0,1,0],[0,0,0]] → Output: 2 เส้นทาง: Right→Right→Down→Down และ Down→Down→Right→Right อัลกอริทึม (DP Bottom-up) ถ้าจุดสิ้นสุดเ

  18. Minimum Path Sum - หาผลรวมเส้นทางน้อยที่สุดในเมทริกซ์ใน C++

    ภาพรวมปัญหา มีเมทริกซ์ m×n เต็มจำนวนเต็มบวก หาเส้นทางจากมุมซ้ายบนไปมุมขวาล่าง ที่ให้ผลรวมน้อยที่สุด เคลื่อนที่ได้เฉพาะลงหรือขวา ตัวอย่าง 131 151 421 Output: 7 (เส้นทาง: 1→3→1→1→1) อัลกอริทึม (Dynamic Programming - Bottom-up) คำนวณ suffix sum ของแถวสุดท้าย (ขวาไปซ้าย) คำนวณ suffix sum ของคอลัมน

  19. พิมพ์พิกัด 2D และความถี่เรียงลำดับใน C++

    ภาพรวมปัญหา ได้รับอาร์เรย์ x[] และ y[] ที่ (x,y) เป็นพิกัดจุดในระนาบ 2D ต้องพิมพ์จุดทั้งหมดพร้อมความถี่ เรียงตามลำดับ ตัวอย่าง Input: x[]={0,1,1,0,0}, y[]={1,2,2,2,1} Output: (0,1)=2, (1,2)=2, (0,2)=1 วิธีแก้ปัญหา ใช้ map<pair<int,int>, int> เก็บความถี่ของแต่ละจุด Key คือ pair(x,y), V

  20. Search a 2D Matrix - ค้นหาในเมทริกซ์ 2 มิติใน C++

    ภาพรวมปัญหา ค้นหาค่า target ในเมทริกซ์ m×n ที่มีคุณสมบัติ: แต่ละแถวจัดเรียงจากซ้ายไปขวา ตัวแรกของแต่ละแถวมากกว่าตัวสุดท้ายของแถวก่อนหน้า ตัวอย่าง 1357 10111620 23303450 53627898 Target = 16 → True อัลกอริทึม (Binary Search 2 ชั้น) Binary Search หาแถวที่ target อาจอยู่ (เปรียบเทียบกับคอลัมน์

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:131/301  20-คอมพิวเตอร์/Page Goto:1 125 126 127 128 129 130 131 132 133 134 135 136 137