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

    สมมติว่าเรามีสตริงที่เป็นพาลินโดรม (อ่านจากหน้าหลังได้เหมือนกัน) เราต้องเปลี่ยนตัวอักษรเพียงตัวเดียวให้เป็นตัวอักษรภาษาอังกฤษพิมพ์เล็ก ใดๆ เพื่อให้สตริงที่ได้เป็นสตริงที่เล็กที่สุดในลำดับเล็กซิโครกราฟิก (lexicographically smallest) และไม่ใช่พาลินโดรม หากไม่สามารถทำได้ ให้คืนค่าสตริงว่าง ตัวอย่างเช่น

  2. การจัดเรียงเมทริกซ์แบบแนวทแยงใน C++

    สมมติว่าเรามีเมทริกซ์ขนาด N x M เราต้องจัดเรียงเมทริกซ์นี้แบบแนวทแยงจากมุมซ้ายบนไปยังมุมขวาล่างในลำดับเพิ่มขึ้น ตัวอย่างเช่น หากเมทริกซ์มีค่าดังนี้: 3311 2212 1112 เมทริกซ์ผลลัพธ์จะเป็น: 1111 1222 1233 ขั้นตอนการแก้ปัญหา กำหนดเมธอด solve() ที่รับพารามิเตอร์ si, sj และเมทริกซ์ mat n := จ

  3. Filter Restaurants by Vegan-Friendly, Price and Distance ใน C++

    ให้ Array restaurants แต่ละ Element = [id, rating, veganFriendly, price, distance] Filter ด้วย 3 เงื่อนไข: veganFriendly รับทั้งคู่ maxPrice: Price ≤ maxPrice maxDistance: Distance ≤ maxDistance คืน **Array of IDs** เรียง **Rating Descending**, Tie: **ID Descending** ตัวอย่าง restaurants = [

  4. Find the City With the Smallest Number of Neighbors at a Threshold Distance ใน C++

    ให้ n เมือง (0..n-1) และ edges = [from, to, weight] (Bidirectional Weighted Graph) และ distanceThreshold คืน **Index สูงสุด** ตัวอย่าง Neighbors ≤4: {1,2} Count=2 City 0 and 3 have Count=2 (Min). Return Max Index = 3. Output: 3 แนวทาง: Floyd-Warshall Algorithm (All-Pairs Shortest Path) n ≤ 10

  5. Reduce Array Size to The Half ใน C++ : ลบ Element ให้เหลือ ≤ ครึ่งด้วย Set ขนาดน้อยสุด

    ให้ Array arr เลือก **Set of Integers** ลบ **ทุก Occurrence** ของ Integers ใน Set นั้นออกจาก Array ให้ Array เหลือขนาด **≤ n/2** หา **ขนาด Set น้อยที่สุด** ตัวอย่าง arr = [3,3,3,3,5,5,5,2,2,7] (n=10, Target ≤ 5) 1 **Size 2** Set {3,5} หรือ {3,2} หรือ {5,2} ก็ได้ Output: 2 แนวทาง: Greedy + Freq

  6. Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold ใน C++

    ให้ Array arr, Integer k, threshold หาจำนวน **Subarrays ความยาว k** ที่ **Average ≥ Threshold** ตัวอย่าง arr = [2,2,2,2,5,5,5,8], k=3, threshold=4 Subarrays of size 3: [2,2,2] Avg=2 < 4 [2,2,2] Avg=2 < 4 [2,2,5] Avg=3 < 4 [2,5,5] Avg=4 ≥ 4 ✓ [5,5,5] Avg=5 ≥ 4 ✓ [5,5,8] Avg=6 ≥ 4 ✓ Output: 3 แนว

  7. Angle Between Hands of a Clock ใน C++ : คำนวณมุมระหว่างเข็มนาทีและเข็มชั่วโมง

    ให้ hour (1-12) และ minutes (0-59) หา **มุมเล็กที่สุด** (≤ 180°) ระหว่างเข็มนาทีและเข็มชั่วโมง ตัวอย่าง hour=12, minutes=30 Minute Hand: 30 * 6° = 180° (จาก 12) Hour Hand: (0 * 30°) + (30 * 0.5°) = 15° (ชั่วโมง 12 = 0, เคลื่อน 0.5°/นาที) Min(165, 360-165) = 165° สูตรคำนวณ minuteAngle = minute

  8. Minimum Number of Steps to Make Two Strings Anagram ใน C++

    ให้ String s และ t ความยาวเท่ากัน ใน 1 Step เลือก Char ใน t 1 ตัว แทนที่ด้วย Char อื่น หา **Steps น้อยที่สุด** ทำให้ t เป็น **Anagram** ของ s (มีตัวอักษรชนิดและจำนวนเท่ากัน ไม่สนลำดับ) ตัวอย่าง s = yxy, t = xyx s Count: x:1, y:2 | t Count: x:2, y:1 1 Step แนวทาง: Frequency Count + Match Common C

  9. Product of the Last K Numbers ใน C++ : หาผลคูณ K ตัวท้ายด้วย Prefix Product

    ออกแบบ Class **ProductOfNumbers** รองรับ: add(int num): เพิ่มตัวเลขท้าย List getProduct(int k): คืนค่า **ผลคูณของ k ตัวท้าย** (รับประกันว่ามี ≥ k ตัว) ตัวอย่าง 4*8 = 32 แนวทาง: Prefix Product Array + Zero Handling Maintain Array pref ที่ pref[i] = Product ของ Elements แรก i ตัว (1-indexed, pr

  10. Maximum Number of Events That Can Be Attended ใน C++ : หา Event สูงสุดที่เข้าร่วมได้

    ให้ Array events[i] = [startDay, endDay] สามารถเข้าร่วม Event i ได้ที่วัน d ใดก็ได้ที่ startDay ≤ d ≤ endDay แต่ **1 วันเข้าร่วมได้สูงสุด 1 Event** หา **จำนวน Event สูงสุด** ที่เข้าร่วมได้ ตัวอย่าง events = [[1,4], [4,4], [2,2], [3,4], [1,1]] Optimal Schedule: Day 1: Event [1,1] (Index 4) Day 2:

  11. Apply Discount Every n Orders ใน C++ : ระบบ Cashier ให้ส่วนลดทุก N คน

    ออกแบบ Class **Cashier** สำหรับซูเปอร์มาร์เก็ต: Constructor: Cashier(int n, int discount, vector<int> products, vector<int> prices) n: ทุก n Customer ได้ส่วนลด discount: เปอร์เซ็นต์ลด (เช่น 50 = 50%) products[i]: Product ID, prices[i]: ราคาต่อหน่วย getBill(vector<int> product,

  12. Number of Substrings Containing All Three Characters ใน C++ : นับ Substring ที่มี a,b,c ครบ

    ให้ String s ประกอบด้วย a, b, c เท่านั้น หาจำนวน **Substrings** ที่มี **a, b, c อย่างน้อย 1 ตัวแต่ละตัว** ตัวอย่าง s = abcabc Valid Substrings (10 ตัว): abc, abca, abcab, abcabc, bca, bcab, bcabc, cab, cabc, abc (Last) Output: 10 แนวทาง: Sliding Window + Count Map (Two Pointers) ใช้ j = Left Boun

  13. Validate Binary Tree Nodes ใน C++ : ตรวจสอบ Binary Tree Valid จาก Left/Right Child Arrays

    ให้ n Nodes (0..n-1) และ Array leftChild, rightChild โดย leftChild[i] = Left Child ของ Node i (-1 ถ้าไม่มี) ตรวจสอบว่า **Nodes ทั้ง n ตัวนี้สร้าง Binary Tree ได้เพียงต้นเดียวและ Valid** หรือไม่ Valid Binary Tree Conditions: มี **Root เพียง 1 ตัว** (ไม่มี Parent) Invalid) **ทุก Node ถูก Visit** (C

  14. Closest Divisors ใน C++ : หาตัวหารคู่ที่ใกล้ที่สุดของ num+1 หรือ num+2

    ให้ Integer num หา **คู่ตัวหาร (a, b)** ที่: a * b = num + 1 **OR** a * b = num + 2 |a - b| **น้อยที่สุด** (Closest Divisors) คืนค่าคู่ที่ดีกว่า (Diff น้อยกว่า) ใดก็ได้ ตัวอย่าง num = 8 num+1 = 9 **Best: (3,3)** num+2 = 10 Best: (2,5) เลือก (3,3) เพราะ Diff=0 < 3 Output: [3, 3] แนวทาง: หาตัวห

  15. Linked List in Binary Tree ใน C++ : ตรวจสอบ Linked List เป็น Downward Path ใน Tree

    ให้ **Binary Tree Root** และ **Linked List Head** ตรวจสอบว่า **Linked List ทั้งหมด** ตรงกับ **Downward Path** ใดๆ ใน Tree (จาก Node ใด Node หนึ่ง ลงมา Child ต่อเนื่อง) หรือไม่ ตัวอย่าง 6 Tree: (มี Path 1-4-2-6 ลงมา) Output: true แนวทาง: DFS + Memoization (DP on Tree x List) State: (listNode, tr

  16. Longest ZigZag Path in a Binary Tree ใน C++ : เส้นทาง ZigZag ยาวที่สุด

    ให้ Binary Tree หา **ZigZag Path ยาวที่สุด** โดย: เริ่มที่ Node ใดก็ได้ เลือกทิศทาง (Left/Right) **สลับทิศทาง** (Left สลับ... จนเดินไม่ได้ ความยาว = จำนวน Nodes - 1 (Single Node = Length 0) ตัวอย่าง Length 3 แนวทาง: DFS Return Pair (LeftMax, RightMax) สำหรับแต่ละ Node คำนวณ: leftLen = Longes

  17. Bulb Switcher III ใน C++ : นับ Moment ที่หลอดไฟเปิดทั้งหมดเป็นสีน้ำเงิน

    มีหลอดไฟ n ดวง (1..n) เรียงซ้าย-ขวา เริ่มต้น **ปิดทั้งหมด** ที่ Moment k (0-indexed) เปิดหลอด light[k] หลอดจะกลายเป็น **สีน้ำเงิน (Blue)** ก็ต่อเมื่อ **มันเปิดอยู่** และ **หลอดด้านซ้ายทั้งหมดเปิดอยู่แล้ว** (Prefix All On) หาจำนวน **Moments** ที่ **หลอดที่เปิดอยู่ทั้งหมด เป็นสีน้ำเงินหมด** (All Turn

  18. Time Needed to Inform All Employees ใน C++ : เวลาระบาดข่าวในองค์กร

    บริษัทมีพนักงาน n คน (ID 0..n-1) Head คือ headID Array manager[i] = Manager ตรงๆ ของ i (manager[headID] = -1) โครงสร้างเป็น **Tree** informTime[i] = นาทีที่ i ใช้แจ้งข่าวให้ **Direct Subordinates ทั้งหมด** (หลังจากเวลานี้ Subordinates ถึงจะเริ่มแจ้งต่อได้) หา **เวลารวมน้อยที่สุด** จน **ทุกคน** ได้ร

  19. Find Corresponding Node in Cloned Binary Tree ใน C++

    ให้ **Binary Tree 2 ต้น**: original และ cloned (Clone ของ Original) และ Pointer target ชี้ไป Node ใน Original Tree หา **Pointer ไป Node เดียวกันใน Cloned Tree** ตัวอย่าง Tree: 7 / \ 4 3 <- Target (Original) / \ 6 19 Cloned Tree โครงสร้างเหม

  20. Design a Stack With Increment Operation ใน C++ : Stack รองรับ Increment Bottom K Elements

    ออกแบบ **CustomStack** รองรับ Operations: CustomStack(int maxSize) : กำหนดขนาดสูงสุด push(int x) : Push ถ้ายังไม่เต็ม pop() -1 increment(int k, int val) : **บวก val บวกทั้งหมด) แนวทาง: Lazy Propagation ด้วย Increment Array แทนที่จะ Loop บวกทุกครั้ง (O(k)) ใช้ **Increment Array inc[]** เก็บ ค่าที

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