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

    ให้กราฟมีทิศทาง (directed) และไม่มีวัฏจักร (acyclic) มีโหนด 0, 1, ..., N-1 โดย graph[i] = รายการโหนด j ที่มีเส้นจาก i → j ต้องการหา ทุกเส้นทาง จากโหนด 0 ไปโหนด N-1 ตัวอย่าง: graph = [[1,2],[3],[3],[]] → [[0,1,3],[0,2,3]] ขั้นตอนการแก้ปัญหา (DFS + Backtracking) สร้างอาร์เรย์ 2D res เก็บผลลัพธ์ ฟังก์

  2. การจับคู่แบบ CamelCase ใน C++

    ให้รายการคำถาม (queries) และ pattern ต้องการคืนอาร์เรย์ boolean ที่ answer[i] = true ก็ต่อเมื่อ queries[i] จับคู่ (match) กับ pattern โดยนิยามว่า: สามารถแทรกตัวอักษรเล็ก (lowercase) เข้าไปใน pattern ได้จนเท่ากับ query ตัวอย่าง: queries = [FooBar,FooBarTest,FootBall,FrameBuffer,ForceFeedBack], patter

  3. หาจุดน้ำที่ไกลจากบกที่สุดใน C++

    กริด N x N ประกอบด้วย 0 (น้ำ) และ 1 (บก) ต้องการหาช่องน้ำที่มีระยะทางไปยังบกที่ใกล้ที่สุด มากที่สุด (maximin distance) ใช้ระยะทางแมนฮัตตัน |x0-x1| + |y0-y1| หากไม่มีน้ำหรือไม่มีบก ให้คืน -1 ตัวอย่าง: 1 0 1 0 0 0 1 0 1 ช่อง (1,1) ไกลจากบกทุกช่อง 2 หน่วย → คำตอบ 2 ขั้นตอนการแก้ปัญหา (Multi-source BFS)

  4. ธุรกรรมที่ไม่ถูกต้องใน C++

    กำหนดรายการธุรกรรม แต่ละรายการเป็นสตริงรูปแบบ name,time,amount,city ธุรกรรมถือว่า ไม่ถูกต้อง (invalid) หาก: จำนวนเงิน (amount) เกิน 1000 ดอลลาร์, หรือ เกิดขึ้นภายใน 60 นาที (รวมขอบ) ของธุรกรรมอีกใบที่มี ชื่อเดียวกัน แต่ เมืองต่างกัน ต้องการคืนรายการธุรกรรมที่ไม่ถูกต้องทั้งหมด ตัวอย่าง: [alice,20,8

  5. ผลรวมสูงสุดของอาร์เรย์ซ้ำ K ครั้งใน C++

    ให้อาร์เรย์ arr และจำนวนเต็ม k สร้างอาร์เรย์ใหม่โดยการซ้ำ arr จำนวน k ครั้ง (เช่น arr=[1,2], k=3 → [1,2,1,2,1,2]) ต้องการหาผลรวมสูงสุดของย่อยอาร์เรย์ (subarray) ในอาร์เรย์ใหม่นี้ คำตอบ modulo 10^9+7 ย่อยอาร์เรย์อาจว่างได้ (ผลรวม 0) ตัวอย่าง: arr=[1,-2,1], k=5 → 2 ขั้นตอนการแก้ปัญหา คำนวณ 4 ค่าสำคัญ

  6. แทนที่สตริงย่อยเพื่อทำให้สตริงสมดุลใน C++

    ให้สตริงที่ประกอบด้วยตัวอักษร 4 ตัวคือ Q, W, E, R สตริงจะ สมดุล (balanced) ถ้าแต่ละตัวอักษรปรากฏเท่ากัน n/4 ครั้ง (n = ความยาวสตริง) ต้องการหาความยาวน้อยที่สุดของสตริงย่อยที่สามารถแทนที่ได้เพื่อทำให้สตริงทั้งหมดสมดุล หากสมดุลอยู่แล้ว คืน 0 ตัวอย่าง: s = QQWE → คำตอบ 1 (แทน Q ด้วย R ได้ RQWE) ขั้นตอน

  7. การเรียงสับเปลี่ยนแบบวงกลมในรูปแบบไบนารีใน C++

    ให้จำนวนเต็ม n และ start ต้องการสร้างการเรียงสับเปลี่ยน p ของ 0,1,2,...,2^n-1 ที่สอดคล้องเงื่อนไข: p[0] = start p[i] และ p[i+1] แตกต่างกันเพียง 1 บิตในรูปแบบไบนารี p[0] และ p[2^n-1] ก็ต้องแตกต่างกัน 1 บิตเช่นกัน นี่คือ Gray Code ที่หมุนเริ่มต้นที่ start ตัวอย่าง: n=2, start=3 → [3,2,0,1] (ไบนารี:

  8. ความยาวสูงสุดของสตริงต่อกันที่มีตัวอักษรไม่ซ้ำใน C++

    ให้อาร์เรย์สตริง arr ต้องการหาความยาวสูงสุดของสตริง s ที่ได้จากการต่อสตริงย่อย (subsequence) ของ arr โดยที่ s ต้องมีตัวอักษรทั้งหมดไม่ซ้ำกัน ตัวอย่าง: [cha,r,act,ers] → 6 เพราะได้ chaers หรือ acters ขั้นตอนการแก้ปัญหา (Backtracking + Bitmask) สร้างฟังก์ชัน ok(s, t) ตรวจสอบว่าต่อ s และ t แล้วตัวอักษ

  9. สร้างเมทริกซ์ 2 แถวแบบไบนารีใหม่ใน C++

    ให้เมทริกซ์ 2 แถว n คอลัมน์ ที่แต่ละเซลล์เป็น 0 หรือ 1 โดยมีเงื่อนไข: ผลรวมแถวบน (upper) = upper ผลรวมแถวล่าง (lower) = lower ผลรวมคอลัมน์ที่ i = colsum[i] ต้องสร้างเมทริกซ์ที่ตรงเงื่อนไขทั้งหมด หากมีหลายคำตอบ ให้คำตอบไหนก็ได้ หากไม่มีคำตอบ ให้คืนอาร์เรย์ว่าง ตัวอย่าง: upper=2, lower=1, colsum=[1,

  10. การเข้ารหัสตัวเลขใน C++

    ให้จำนวนเต็มไม่ติดลบ n ต้องการหารูปแบบเข้ารหัสตามตารางด้านล่าง: NumberEncoded 0 10 21 300 401 510 611 7000 ตัวอย่าง: 23 → 1000, 54 → 10111 ขั้นตอนการแก้ปัญหา สร้างฟังก์ชันช่วย bin(n, k) แปลง n เป็นบाइनารี ความยาว k บิต (เติม 0 ด้านหน้า) ฟังก์ชันหลัก encode(n): กรณีฐาน: n=0 → , n=1 → 0, n=2 → 1

  11. ภูมิภาคร่วมที่เล็กที่สุดใน C++

    ให้รายการภูมิภาคหลายชุด โดยภูมิภาคตัวแรกของแต่ละชุดจะครอบคลุมภูมิภาคอื่นๆ ในชุดนั้น นั่นคือ ถ้า X ครอบคลุม Y แสดงว่า X ใหญ่กว่า Y และทุกภูมิภาคครอบคลุมตัวเองด้วย กำหนดภูมิภาคสองแห่ง r1 และ r2 ต้องการหาภูมิภาคที่เล็กที่สุดที่ครอบคลุมทั้งสองแห่ง ตัวอย่าง: อินพุต [[Earth,North America,South America], [

  12. ผลรวมสูงสุดที่หารด้วย 3 ลงตัวใน C++

    ให้อาร์เรย์ nums ของจำนวนเต็ม ต้องการหาผลรวมสูงสุดของสมาชิกในอาร์เรย์ที่หารด้วย 3 ลงตัว ตัวอย่างเช่น อินพุต [3,6,5,1,8] ผลลัพธ์คือ 18 เพราะเลือกย่อยอาร์เรย์ [3,6,1,8] ได้ผลรวม 18 ซึ่งหารด้วย 3 ลงตัว ขั้นตอนการแก้ปัญหา (Dynamic Programming) n := ขนาดของอาร์เรย์ nums สร้างตาราง DP ขนาด (n + 1) x 3 โด

  13. จำนวนแฮมเบอร์เกอร์ที่ทำได้โดยไม่มีวัตถุดิบเหลือทิ้งใน C++

    สมมติว่าเรามีจำนวนเต็มสองจำนวนคือ tomatoSlices (แผ่นมะเขือเทศ) และ cheeseSlices (แผ่นชีส) ซึ่งเป็นวัตถุดิบสำหรับทำแฮมเบอร์เกอร์สองประเภท ดังนี้ แฮมเบอร์เกอร์ขนาดใหญ่ (Jumbo Burger): ใช้ 4 แผ่นมะเขือเทศ และ 1 แผ่นชีส แฮมเบอร์เกอร์ขนาดเล็ก (Small Burger): ใช้ 2 แผ่นมะเขือเทศ และ 1 แผ่นชีส เราต้องหาค

  14. Count Square Submatrices with All Ones นับสี่เหลี่ยมจัตุรัสที่เป็น 1 ทั้งหมดใน C++

    ให้เมทริกซ์ไบนารี m×n นับจำนวน square submatrices ที่ทุกค่าเป็น 1 ตัวอย่าง: [[0,1,1,1],[1,1,1,1],[0,1,1,1]] → 15 (10 ช่องเดี่ยว, 4 ช่อง 2×2, 1 ช่อง 3×3) วิธีแก้ปัญหา (Dynamic Programming) dp[i][j] = ขนาดสี่เหลี่ยมจัตุรัสสูงสุดที่มุมขวาล่างอยู่ที่ (i,j) ans = 0 บวกขอบล่างและขอบขวาเข้า ans ก่อน (ba

  15. Group the People Given the Group Size They Belong To จัดกลุ่มตามขนาดกลุ่มใน C++

    มี n คน ID 0 ถึง n-1 แต่ละคนอยู่ในกลุ่มขนาด groupSizes[i] จัดกลุ่มให้ถูกต้อง (แต่ละกลุ่มมีขนาดตรงกับที่กำหนด) ตัวอย่าง: [3,3,3,3,3,1,3] → [[5],[0,1,2],[3,4,6]] วิธีแก้ปัญหา (Hash Map Grouping) map m: key = group size, value = ลิสต์คนที่อยากอยู่กลุ่มขนาดนั้น วนทุกคน i: ใส่ i ลง m[groupSizes[i]] สร

  16. Find the Smallest Divisor Given a Threshold หาตัวหารน้อยที่สุดใน C++

    ให้อาร์เรย์ nums และ threshold k หาตัวหารบวกน้อยที่สุดที่ทำให้ผลรวม ceil(nums[i]/divisor) ≤ k ตัวอย่าง: nums=[1,2,5,9], k=6 → divisor=5 (ผลรวม: 1+1+1+2=5 ≤ 6) วิธีแก้ปัญหา (Binary Search) ฟังก์ชัน check(x): คำนวณผลรวม ceil(nums[i]/x) คืน true ถ้า ≤ k Binary search: low=1, high=1e7 mid = (low+hig

  17. Sequential Digits หาตัวเลขที่หลักเรียงติดกันในช่วงใน C++

    ตัวเลขมี sequential digits ถ้าหลักแต่ละหลักมากกว่าหลักก่อนหน้า 1 หาตัวเลขทุกตัวใน [low, high] ที่มีคุณสมบัตินี้ เรียงจากน้อยไปมาก ตัวอย่าง: low=100, high=300 → [123, 234] วิธีแก้ปัญหา (Generate All Sequential Numbers) สร้างทุกตัวเลขที่เป็นไปได้ (มีเพียง 45 ตัวสำหรับ 1-9 digits): วนความยาว i = 1 ถ

  18. Divide Array in Sets of K Consecutive Numbers แบ่งอาร์เรย์เป็นชุด K ตัวติดกันใน C++

    ให้อาร์เรย์ nums และ k หาว่าแบ่งเป็นชุดๆ ละ k ตัวที่เป็นจำนวนติดกันได้ไหม ตัวอย่าง: [1,2,3,3,4,4,5,6], k=4 → true ([1,2,3,4] และ [3,4,5,6]) วิธีแก้ปัญหา (Greedy + Frequency Map) นับความถี่ใน map m เรียง nums วนทุก x ใน nums: 0 (x เป็นต้นของชุดใหม่): พยายามสร้างชุด x, x+1, ..., x+k-1 ถ้าตัวไหนข

  19. Sum of Mutated Array Closest to Target หาค่า mutate ให้ผลรวมใกล้ target ใน C++

    value ให้ = value ผลรวมจะใกล้ target มากที่สุด (ถ้าเท่ากัน ให้ค่าน้อยสุด) ตัวอย่าง: [4,9,3], target=10 → 3 (array กลายเป็น [3,3,3] sum=9) วิธีแก้ปัญหา (Mathematical Derivation) avg = target / n sum = ผลรวมตัวที่ ≤ avg, cnt = จำนวนตัวที่ ≤ avg ถ้า target - sum = 0 → คืน avg high = ceil((target - s

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:168/301  20-คอมพิวเตอร์/Page Goto:1 162 163 164 165 166 167 168 169 170 171 172 173 174