Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. 01 Matrix – หาระยะห่าง 0 ใกล้ที่สุดใน C++

    ปัญหา: 01 Matrix กำหนดเมทริกซ์ที่ประกอบด้วย 0 และ 1 หาระยะห่างจากแต่ละเซลล์ไปยัง 0 ใกล้ที่สุด ระยะห่างระหว่างเซลล์ติดกัน = 1 (4 ทิศทาง: บน ลซ ซ้าย ขวา) ตัวอย่าง Input: 0 0 0 0 1 0 1 1 1 Output: 0 0 0 0 1 0 1 2 1 แนวทางแก้ปัญหา: Multi-source BFS เริ่ม BFS จาก ทุกเซลล์ที่เป็น 0 พร้อมกัน (Multi-s

  2. นับจำนวนทีมที่เป็นไปได้ใน C++

    ปัญหา: Count Number of Teams มีทหาร n คน ยืนเรียงติดกัน แต่ละคนมีคะแนน (rating) ไม่ซ้ำกัน ต้องจัดทีม 3 คน โดยดัชนี (i, j, k) ที่ i < j < k ทีมถูกต้องถ้า: เพิ่มขึ้น: rating[i] < rating[j] < rating[k] ลดลง: rating[i] > rating[j] > rating[k] หาจำนวนทีมทั้งหมดที่เป็นไปได้ (ทหารคนหนึ่

  3. การสร้างสตริงพาลินโดรม K ตัวใน C++

    ปัญหา: Construct K Palindrome Strings กำหนดสตริง s และจำนวนเต็ม k ต้องการสร้าง k สตริงพาลินโดรม (palindrome) ที่ไม่ว่างเปล่า โดยใช้ ตัวอักษรทั้งหมดใน s ตรวจสอบว่าเป็นไปได้หรือไม่ เงื่อนไขของพาลินโดรม ความยาวคี่: ต้องมีตัวอักษรที่มีความถี่เป็นเลขคี่ สูงสุด 1 ตัว (อยู่ตรงกลาง) ความยาวคู่: ตัวอักษรทุ

  4. การตรวจสอบการทับซ้อนของวงกลมและสี่เหลี่ยมผืนผ้าใน C++

    ปัญหา: Circle and Rectangle Overlapping กำหนดวงกลมด้วย (radius, xc, yc) โดย (xc, yc) คือศูนย์กลาง และสี่เหลี่ยมผืนผ้าที่ขนานแกน (axis-aligned) ด้วย (x1, y1, x2, y2) โดย (x1, y1) = มุมซ้ายล่าง, (x2, y2) = มุมขวาบน ตรวจสอบว่าทั้งสองรูปทับซ้อนกันหรือไม่ แนวคิดหลัก หาจุดบนสี่เหลี่ยมที่อยู่ใกล้ศูนย์กลาง

  5. จำนวนขั้นตอนในการลดตัวเลขในรูปแบบไบนารีให้เหลือ 1 ด้วย C++

    การลดตัวเลขไบนารีให้เหลือ 1 สมมติว่าเรามีตัวเลข s ในรูปแบบไบนารี เราต้องหาจำนวนขั้นตอนในการลดมันให้เหลือ 1 โดยปฏิบัติตามกฎดังนี้: ถ้าตัวเลขปัจจุบันเป็นเลขคู่ ให้หารด้วย 2 ถ้าตัวเลขปัจจุบันเป็นเลขคี่ ให้บวก 1 เข้าไป ตัวอย่าง อินพุต: 1101 (คือ 13 ในฐานสิบ) 13 เป็นเลขคี่ → บวก 1 ได้ 14 14 เป็นเลขคู

  6. สตริง Happy ยาวที่สุดใน C++

    สตริงจะ happy ถ้าไม่มี substring aaa, bbb, ccc กำหนด a,b,c เป็นจำนวนสูงสุดของ a,b,c หา happy string ยาวที่สุดตัวอย่าง: a=1, b=1, c=7 → ccaccbcc (หรือ ccbccacc)วิธีแก้ปัญหา (Greedy + Priority Queue) ใช้ max-heap เรียงตาม count ที่เหลือ ทุกขั้นตอน: ดึงตัวที่เหลือมากสุด ถ้าตัวสุดท้ายของผลลัพธ์เหมือนตั

  7. คิวรี่บน Permutation พร้อม Key ใน C++

    สมมติว่าเรามีอาร์เรย์ queries ค่าระหว่าง 1 ถึง m เริ่มจาก permutation P=[1,2,3,...,m] สำหรับแต่ละ query: หาตำแหน่งของ queries[i] ใน P (0-indexed) แล้วย้ายมาหน้าสุด เราต้องหาผลลัพธ์ทั้งหมดตัวอย่าง: queries = [3,1,2,1], m = 5 ผลลัพธ์ = [2,1,2,1]วิธีแก้ปัญหา (Simulation) สร้าง vector v = [1,2,...,m] สำ

  8. HTML Entity Parser ใน C++

    , <→<, ⁄→/ตัวอย่าง: & is changed but &ambassador; is not. → & is changed but &ambassador; is not.วิธีแก้ปัญหา แยกสตริงด้วย space สแกนแต่ละ token หา pattern &...; ถ้าตรงกับ entity ใน map ให้แทนที่ รวมกลับเป็นสตริงตัวอย่างโค้ด C++; m[<] = <; m[⁄] = /;

  9. หาจำนวนฟีโบนัชชีน้อยที่สุดที่รวมกันได้ K ใน C++

    สมมติว่าเรามีจำนวน k หาจำนวนฟีโบนัชชีน้อยที่สุดที่รวมกันได้ k (ใช้ซ้ำได้)ตัวอย่าง: k = 7 → 2 (2 + 5 = 7)วิธีแก้ปัญหา (Greedy) สร้างเลขฟีโบนัชชีจนเกิน k จากตัวมากที่สุดลงมา: ถ้า fib[j] ≤ k ให้ลบ k และนับ +1 ทำซ้ำจน k = 0 (Zeckendorfs theorem: greedy ให้คำตอบ optimal)ตัวอย่างโค้ด C++#include <bits/

  10. สตริง Happy ลำดับที่ K แบบ Lexicographical ใน C++

    สตริงจะเป็น happy ถ้าประกอบด้วย a,b,c เท่านั้น และไม่มีตัวติดกันซ้ำ (s[i] ≠ s[i+1]) กำหนด n, k หา happy string ความยาว n ลำดับที่ k เรียง lexicographicalตัวอย่าง: n=3, k=9 → cab (มีทั้งหมด 12 สตริง: aba, abc, aca, acb, bab, bac, bca, bcb, cab, cac, cba, cbc)วิธีแก้ปัญหา (Backtracking) DFS สร้าง happ

  11. แสดงตารางออเดอร์อาหารในร้านอาหารใน C++

    สมมติว่าเรามีอาร์เรย์ orders แสดงออเดอร์ของลูกค้า orders[i] = [customer_name, table_number, food_item] เราต้องสร้าง display table แสดงจำนวนอาหารแต่ละชนิดที่แต่ละโต๊ะสั่ง คอลัมน์แรกเป็นหมายเลขโต๊ะ ตามด้วยชื่ออาหารเรียง A-Z แถวแรกเป็น headerตัวอย่าง: orders = [[Amal,3,Paratha],[Bimal,10,Biryni],...] ผ

  12. จำนวนกบน้อยที่สุดที่ร้องได้ใน C++

    สมมติว่าเรามีสตริง croakOfFrogs แทนเสียง croak ของกบหลายตัวผสมกัน หาจำนวนกบน้อยที่สุดที่ทำให้ได้สตริงนี้ หากไม่ valid คืน -1ตัวอย่าง: crcoakroak → 2 กบวิธีแก้ปัญหา นับความถี่ตัวอักษร c,r,o,a,k ใน map ตลอดเวลา: count(c) ≥ count(r) ≥ count(o) ≥ count(a) ≥ count(k) นับกบที่กำลังร้องพร้อมกัน (temp): +1

  13. คะแนนสูงสุดจากการหยิบการ์ดใน C++

    สมมติว่ามีการ์ดเรียงเป็นแถว แต่ละใบมีคะแนน ในแต่ละขั้นตอนหยิบได้ 1 ใบจากขวาหรือซ้าย ต้องหยิบกี่ใบ k ใบ หาคะแนนสูงสุดตัวอย่าง: cardPoints = [1,2,3,4,5,6,1], k = 3 ผลลัพธ์ = 12 (หยิบ 3 ใบขวาสุด: 1+6+5)วิธีแก้ปัญหา (Prefix Sum) คำนวณ prefix sum จากซ้าย (pre1) และจากขวา (pre2) ลองหยิบ i ใบจากซ้าย และ k-

  14. Diagonal Traverse II ใน C++

    สมมติว่าเรามี list of lists nums เราต้องแสดงทุก element ใน diagonal orderตัวอย่าง: [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]] ผลลัพธ์: [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]วิธีแก้ปัญหา เก็บ (value, row, col) ของทุก element เรียงตาม (row+col) แล้ว row มากกว่า (descending) เพื่อให้ได้ diago

  15. ความต่างสูงสุดจากการเปลี่ยนตัวเลขใน C++

    สมมติว่าเรามีจำนวนเต็ม num ทำการดังนี้ 2 ครั้ง: เลือกตัวเลข x (0-9), เลือก y (0-9), แทนที่ x ทุกตัวใน num ด้วย y (ห้าม leading zero, ห้ามเป็น 0) ให้ a, b เป็นผลลัพธ์ครั้งที่ 1,2 หาความต่างสูงสุด |a-b|ตัวอย่าง: 555 → ครั้งแรก 5→9 ได้ 999, ครั้งที่สอง 5→1 ได้ 111 ความต่าง = 888วิธีแก้ปัญหา getMax: หาต

  16. ตรวจสอบว่าสตริงหนึ่งสามารถ Break อีกสตริงหนึ่งได้ใน C++

    สมมติว่าเรามีสตริง s1 และ s2 ความยาวเท่ากัน ตรวจสอบว่า permutation ใดของ s1 สามารถ break permutation ใดของ s2 ได้ (หรือกลับกัน) โดย string a break b ได้ถ้า a[i] ≥ b[i] สำหรับทุก iตัวอย่าง: s1 = abc, s2 = xya ผลลัพธ์ = true เพราะ ayx (perm ของ s2) break abc (perm ของ s1)วิธีแก้ปัญหา เรียง s1 และ s2 ท

  17. ตรวจสอบว่า 1 ทั้งหมดห่างกันอย่างน้อย K ช่องใน C++

    สมมติว่าเรามีอาร์เรย์ nums ประกอบด้วย 0 และ 1 และจำนวนเต็ม k ตรวจสอบว่า 1 ทุกตัวห่างกันอย่างน้อย k ช่องหรือไม่ตัวอย่าง: nums = [1,0,0,0,1,0,0,1], k = 2 ผลลัพธ์ = trueวิธีแก้ปัญหา เก็บตำแหน่ง 1 ล่าสุด (last = -1) วนลูปผ่าน nums: ถ้าเจอ 1: ตรวจสอบ i - last - 1 ≥ k ถ้าไม่ผ่าน คืน false อัปเดต last = i

  18. Subarray ต่อเนื่องยาวที่สุดที่ Absolute Diff ≤ Limit ใน C++

    สมมติว่าเรามีอาร์เรย์ nums และ limit หาขนาด subarray ยาวที่สุดที่ความต่างสัมบูรณ์ระหว่างสมาชิกใดๆ ≤ limitตัวอย่าง: nums = [8,2,4,7], limit = 4 ผลลัพธ์ = 2 (subarray [2,4] หรือ [4,7])วิธีแก้ปัญหา (Sliding Window + Deque) ใช้ deque สองตัว: maxD (descending) และ minD (ascending) ขยาย window ด้วย i: ma

  19. นับ Triplets ที่สร้างอาร์เรย์ XOR เท่ากันได้ใน C++

    สมมติว่าเรามีอาร์เรย์จำนวนเต็ม arr เลือก i, j, k โดย 0 ≤ i < j ≤ k < N ให้ a = arr[i] XOR ... XOR arr[j-1], b = arr[j] XOR ... XOR arr[k] หาจำนวน triplets ที่ a == bตัวอย่าง: [2,3,1,6,7] ผลลัพธ์ = 4 triplets: (0,1,2), (0,2,2), (2,3,4), (2,4,4)วิธีแก้ปัญหา สังเกต: a == b ⟺ XOR จาก i ถึง k = 0 สำหรับแ

  20. เวลาน้อยที่สุดในการเก็บแอปเปิ้ลทั้งหมดในต้นไม้ใน C++

    สมมติว่ามี undirected tree n โหนด 0 ถึง n-1 บางโหนดมีแอปเปิ้ล ใช้เวลา 1 วินาทีต่อ edge เราต้องหาเวลาน้อยที่สุดในการเก็บแอปเปิ้ลทั้งหมดเริ่มจากโหนด 0 และกลับมาที่ 0ตัวอย่าง: n=7, edges=[[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], hasApple=[f,f,t,f,t,t,f] ผลลัพธ์ = 8วิธีแก้ปัญหา (DFS) สร้าง adjacency list จ

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:226/301  20-คอมพิวเตอร์/Page Goto:1 220 221 222 223 224 225 226 227 228 229 230 231 232