Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. หาค่ามัธยฐานจากสตรีมข้อมูลใน C++ (Find Median from Data Stream)

    ภาพรวมปัญหา ออกแบบคลาสที่รองรับ: - addNum(num): เพิ่มตัวเลข - findMedian(): คืนค่ามัธยฐานของตัวเลขทั้งหมดที่เพิ่มมา วิธีแก้ปัญหา: Two Heaps Max Heap (left): เก็บครึ่งล่าง (ค่าน้อยกว่ามัธยฐาน) — ดึง max ได้ O(1) Min Heap (right): เก็บครึ่งบน (ค่ามากกว่ามัธยฐาน) — ดึง min ได้ O(1) รักษา invariant: |

  2. ระเบิดลูกโป่งใน C++ (Burst Balloons)

    ภาพรวมปัญหา มีลูกโป่ง n ลูก มีตัวเลขทับอยู่ ระเบิดลูก i ได้เหรียญ nums[i-1]×nums[i]×nums[i+1] หลังระเบิด ลูกข้างเคียงจะติดกัน หาเหรียญสูงสุด ตัวอย่าง [3,1,5,7] → 148 ระเบิด 1: 3×1×5=15 → [3,5,7] ระเบิด 5: 3×5×7=105 → [3,7] ระเบิด 3: 1×3×7=21 → [7] ระเบิด 7: 1×7×1=7 → Total: 148 วิธีแก้ปัญหา: DP บน

  3. นับจำนวนน้อยกว่าด้านขวาใน C++ (Count of Smaller Numbers After Self)

    ภาพรวมปัญหา i) ตัวอย่าง [5,2,7,1] → [2,1,1,0] วิธีแก้ปัญหา: BIT (Fenwick Tree) + Coordinate Compression Normalize ค่า: ลบ min ออก +1 ให้เริ่มที่ 1 ใช้ BIT นับความถี่: update(index, +1), query(index) = prefix sum วนจากขวาไปซ้าย: query(nums[i]-1) ได้จำนวนน้อยกว่า, แล้ว update(nums[i], +1) โค้ด C

  4. ลบตัวอักษรซ้ำให้เรียงเล็กซิโครกราฟิกใน C++

    ภาพรวมปัญหา ลบตัวอักษรซ้ำในสตริง ให้เหลือแต่ละตัว 1 ตัว และเรียงตามลำดับเล็กซิโครกราฟิกที่น้อยที่สุด ตัวอย่าง abccb → abc วิธีแก้ปัญหา: Monotonic Stack + Greedy นับความถี่แต่ละตัวอักษร วนอ่านตัวอักษร: ลด frequency, ถ้าอยู่ใน stack แล้ว skip ขณะ stack ไม่ว่าง และ ตัวปัจจุบัน < stack.top() และตัวบน

  5. เพิ่มค่าลงอาเรย์เพื่อครอบคลุมช่วง 1 ถึง N ใน C++ (Patching Array)

    ภาพรวมปัญหา ให้อาเรย์ nums และตัวเลข n เพิ่มตัวเลขน้อยที่สุดเข้า nums เพื่อให้สร้างผลรวมได้ทุกค่าใน [1,n] ตัวอย่าง nums = [1,4], n = 7 → เพิ่ม 1 ตัว (คือ 2) → สร้างได้ 1,2,3,4,5,6,7 วิธีแก้ปัญหา: Greedy รักษา req = ค่าที่เล็กที่สุดที่ยังสร้างไม่ได้ - ถ้า nums[i] ≤ req → ใช้ nums[i] ขยายได้เป็น req

  6. ตรวจสอบเส้นทางตัดกันเองใน C++ (Self Crossing)

    ภาพรวมปัญหา เริ่มที่ (0,0) เดิน: x[0] 北, x[1] 西, x[2] 南, x[3] 東, ... (หมุนทวนเข็มนาฬิกา) ตรวจสอบว่าเส้นทางตัดตัวเองหรือไม่ O(1) space ตัวอย่าง x = [3,4,2,5] → true (ตัดกัน) วิธีแก้ปัญหา: รูปแบบ 3 กรณี เส้นทางตัดกันได้ 3 แบบ: 1. วงจร 4 ขั้น: x[i] ≥ x[i-2] และ x[i-1] ≤ x[i-3] 2. วงจร 5 ขั้น: x[i] +

  7. สรุปช่วงข้อมูลแบบไม่ทับซ้อนใน C++ (Data Stream as Disjoint Intervals)

    ภาพรวมปัญหา รับสตรีมตัวเลขเข้ามาเรื่อยๆ สรุปเป็นรายการช่วง (intervals) ที่ไม่ทับซ้อนกัน ทุกครั้งที่เพิ่มตัวเลขใหม่ ตัวอย่าง เพิ่ม: 1 → [[1,1]] เพิ่ม: 3 → [[1,1],[3,3]] เพิ่ม: 8 → [[1,1],[3,3],[8,8]] เพิ่ม: 2 → [[1,3],[8,8]] (รวม 1,2,3) เพิ่ม: 7 → [[1,3],[7,8]] (รวม 7,8) วิธีแก้ปัญหา: Ordered Set

  8. หาเลขดาว (Star Number) ใน C++

    ภาพรวมปัญหา Star Number คือจำนวนที่แสดงรูปดาว 6 จุด (centered hexagram) สูตร: Sₙ = 6n(n-1) + 1 ลำดับ Star Number n=1: 1, n=2: 13, n=3: 37, n=4: 73, n=5: 121, ... การ 유도สูตร Sₙ = 1 + 6×(1+2+...+(n-1)) = 1 + 6×n(n-1)/2 = 6n(n-1) + 1 โค้ด C++ #include <iostream> using namespace std; int findS

  9. ผลรวมอนุกรม 1 + x/2! + x²/3! + ... + xⁿ/(n+1)! ใน C++

    ภาพรวมปัญหา หาผลรวมอนุกรม: 1 + Σ xⁱ/(i+1)! จาก i=1 ถึง n ตัวอย่าง x = 6, n = 4 → 1 + 6/2 + 36/6 + 216/24 + 1296/120 = 1 + 3 + 6 + 9 + 10.8 = 29.8 วิธีแก้ปัญหา: ใช้พจน์ก่อนหน้าคำนวณพจน์ถัดไป termᵢ = termᵢ₋₁ × x/i (เริ่ม term₀ = 1, i จาก 2 ถึง n+1) โค้ด C++ #include <iostream> using namespace

  10. ผลรวมอนุกรม a¹/1! + a²/2! + ... + aⁿ/n! ใน C++

    ภาพรวมปัญหา หาผลรวมอนุกรม: Σ aⁱ/i! จาก i=1 ถึง n ตัวอย่าง a = 3, n = 4 → 3/1 + 9/2 + 27/6 + 81/24 = 3 + 4.5 + 4.5 + 3.375 = 15.375 วิธีแก้ปัญหา: ใช้พจน์ก่อนหน้าคำนวณพจน์ถัดไป termᵢ = termᵢ₋₁ × a/i โค้ด C++ #include <iostream> using namespace std; float calcSeriesSum(int a, int n) { flo

  11. ผลรวมสมาชิกในอาเรย์ใน C++

    ภาพรวมปัญหา หาผลรวมของสมาชิกทั้งหมดในอาเรย์ที่กำหนด ตัวอย่าง arr = [3, 1, 7, 2, 9, 10] → 32 วิธีแก้ปัญหา 2 แบบ 1. Iterative (แนะนำ) int calcArraySum(int arr[], int n) { int sumVal = 0; for (int i = 0; i < n; i++) sumVal += arr[i]; return sumVal; } 2. Recursive int calcArraySum(int

  12. ผลรวมลำดับที่กำหนดใน C++ (Given Sequence Sum)

    ภาพรวมปัญหา หาผลรวมลำดับ: (1×2×...×k) + (2×3×...×(k+1)) + ... + ((n-k+1)×...×n) ตัวอย่าง n = 4, k = 3 → (1×2×3) + (2×3×4) = 6 + 24 = 30 วิธีแก้ปัญหา 1: Nested Loop (O(N×K)) for (int i = 1; i <= n-k+1; i++) { term = 1; for (int j = i; j < k+i; j++) term *= j; sum += term; } วิธีแก้ปั

  13. ผลรวมอนุกรมฮาร์มอนิกทั่วไปใน C++ (General Harmonic Series)

    ภาพรวมปัญหา หาผลรวมอนุกรมฮาร์มอนิกทั่วไป: 1/a + 1/(a+d) + 1/(a+2d) + ... + 1/(a+(n-1)d) ตัวอย่าง a = 3, d = 2, n = 5 อนุกรม: 1/3 + 1/5 + 1/7 + 1/9 + 1/11 ≈ 0.878211 วิธีแก้ปัญหา 1: วนลูป (Iterative) float findSeriesSum(int a, int d, int n) { float sumVal = 0; for (float i = 1; i <= n; i++

  14. ผลรวมจำนวนเฉพาะระหว่าง 1 ถึง N ใน C++

    ภาพรวมปัญหา หาผลรวมของจำนวนเฉพาะ (prime numbers) ทั้งหมดระหว่าง 1 ถึง n ตัวอย่าง n = 15 → เฉพาะ: 2,3,5,7,11,13 → ผลรวม = 41 วิธีแก้ปัญหา 1: ตรวจสอบทีละตัว (O(N√N)) bool isPrime(int n) { for (int i = 2; i <= n/2; i++) if (n % i == 0) return false; return true; } วิธีแก้ปัญหา 2: S

  15. ผลรวมอนุกรมฮาร์มอนิกใน C++ (Harmonic Series Sum)

    ภาพรวมปัญหา หาผลรวมอนุกรมฮาร์มอนิก: 1 + 1/2 + 1/3 + ... + 1/n ตัวอย่าง n = 7 → 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 ≈ 2.59286 วิธีแก้ปัญหา ไม่มีสูตรปิดสำหรับอนุกรมฮาร์มอนิก ต้องคำนวณโดยวนลูป โค้ด C++ #include <iostream> using namespace std; float calcSeriesSum(int n) { float sumVar =

  16. ผลรวมอนุกรม 1 + 2+2 + 3+3+3 + ... ใน C++

    ภาพรวมปัญหา หาผลรวมอนุกรม: 1 + 2+2 + 3+3+3 + ... + n (ซ้ำ n ครั้ง) = Σ i² จาก i=1 ถึง n ตัวอย่าง n = 4 → 1 + 2+2 + 3+3+3 + 4+4+4+4 = 1 + 4 + 9 + 16 = 30 วิธีแก้ปัญหา 3 แบบ 1. Nested Loop (O(N²)) - ไม่แนะนำ for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) sum += i; 2. Single

  17. ผลรวมอนุกรม 1×2×3 + 2×3×4 + ... ใน C++

    ภาพรวมปัญหา หาผลรวมอนุกรม: Σ n(n+1)(n+2) จาก n=1 ถึง N ตัวอย่าง N = 5 → 1×2×3 + 2×3×4 + 3×4×5 + 4×5×6 + 5×6×7 = 6+24+60+120+210 = 420 วิธีแก้ปัญหา 1: วนลูป (O(N)) int calcSeriesSum(int n) { int sumVar = 0; for (int i = 1; i <= n; i++) sumVar += i * (i+1) * (i+2); return sumVar;

  18. หามุมของสี่เหลี่ยมใน C++ (Quadrilateral Angles in AP)

    ภาพรวมปัญหา มุมของสี่เหลี่ยม 4 มุมอยู่ในลำดับเลขคณิต (AP) ที่มีความต่างร่วม d หาค่ามุมทั้ง 4 หลักการทางคณิตศาสตร์ มุม 4 มุมคือ: x, x+d, x+2d, x+3d ผลรวมมุมสี่เหลี่ยม = 360° x + (x+d) + (x+2d) + (x+3d) = 360 4x + 6d = 360 2x + 3d = 180 x = (180 - 3d) / 2 ตัวอย่าง d = 15 → x = (180 - 45)/2 = 67.5 มุ

  19. สร้างตัวเลขสูงสุดใน C++ (Create Maximum Number)

    ภาพรวมปัญหา ให้อาเรย์ตัวเลข 2 อาเรย์ (ความยาว m, n) สร้างตัวเลขที่ใหญ่ที่สุดความยาว k (k ≤ m+n) โดยรักษาลำดับสัมพัทธ์ภายในแต่ละอาเรย์ ตัวอย่าง nums1 = [3,4,7,5], nums2 = [9,1,3,5,8,4], k = 5 → Output: [9,8,7,5,4] วิธีแก้ปัญหา: Greedy + Stack + Merge modify(v, k): เลือก k ตัวจาก v ให้ได้ตัวเลขมากท

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:177/301  20-คอมพิวเตอร์/Page Goto:1 171 172 173 174 175 176 177 178 179 180 181 182 183