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

    สมมติว่าเรามีจำนวนเต็ม n เราต้องหาเศษส่วนที่ลดรูปแล้วทั้งหมดระหว่าง 0 และ 1 (ไม่รวมขอบ) ที่ตัวส่วน ≤ nตัวอย่าง: n = 4 ผลลัพธ์: [1/2,1/3,1/4,2/3,3/4] (ไม่นับ 2/4 เพราะลดรูปได้เป็น 1/2)วิธีแก้ปัญหา วน denominator i = 2 ถึง n วน numerator j = 1 ถึง i-1 คำนวณ gcd(i, j) ลดรูปได้ a = j/gcd, b = i/gcd เก็บ

  2. นับโหนดที่ดีใน Binary Tree ใน C++

    สมมติว่าเรามี binary tree โหนด X ถือว่า ดี (good) ถ้าในเส้นทางจาก root ถึง X ไม่มีโหนดไหนมีค่ามากกว่า X เราต้องนับจำนวนโหนดที่ดีตัวอย่าง: ต้นไม้ [3,1,4,3,null,1,5] ผลลัพธ์ = 4วิธีแก้ปัญหา (DFS) DFS พร้อมส่งค่าสูงสุดที่เจอมาใน path (max_so_far) = max_so_far นับ +1 val) เริ่มต้น max_so_far = INT_MINตั

  3. จัดเรียงคำในประโยคใหม่ใน C++

    สมมติว่าเรามีประโยคที่: ตัวแรกเป็นพิมพ์ใหญ่ คั่นด้วยช่องว่างเดี่ยว เราต้องจัดเรียงคำตามความยาวเพิ่มขึ้น ถ้าความยาวเท่ากัน รักษาลำดับเดิมตัวอย่าง: I love to code in cpp → I to in cpp love codeวิธีแก้ปัญหา แปลงตัวแรกเป็นพิมพ์เล็ก แยกคำด้วย space ใส่ vector พร้อม index เดิม เรียงตาม (ความยาว, index) รว

  4. คนที่รายการบริษัทโปรดไม่ใช่ Subset ของอีกคนใน C++

    สมมติว่าเรามีอาร์เรย์ favoriteCompanies โดย favoriteCompanies[i] คือรายการบริษัทโปรดของคนที่ i เราต้องหา index ของคนที่รายการของเขาไม่ใช่ subset ของรายการคนอื่นใดๆตัวอย่าง: [[TCS,google,facebook], [google,microsoft], [google,facebook], [google], [amazon]] ผลลัพธ์ = [0,1,4]วิธีแก้ปัญหา เรียงรายการบริ

  5. จำนวนสระสูงสุดใน Substring ความยาว K ใน C++

    สมมติว่าเรามีสตริง s และจำนวนเต็ม k เราต้องหาจำนวนสระ (vowel) สูงสุดใน substring ใดๆ ของ s ที่มีความยาว kตัวอย่าง: s = abciiidef, k = 3 ผลลัพธ์ = 3วิธีแก้ปัญหา (Sliding Window) นับสระใน window แรก k ตัว เลื่อน window ทีละตัว: ลบสระที่ออกจาก window (i-k) บวกสระที่เข้ามา (i) อัปเดตค่าสูงสุด เวลา O(

  6. เส้นทางปลอมแพลินโดรมใน Binary Tree ใน C++

    สมมติว่าเรามี binary tree ที่ค่าโหนดเป็นเลข 1-9 เส้นทางถือว่า pseudo-palindromic ถ้ามีการเรียงลำดับใหม่ของค่าในเส้นทางที่เป็น palindrome เราต้องนับจำนวนเส้นทางแบบนี้จาก root ถึง leafตัวอย่าง: ต้นไม้ที่มีเส้นทาง [2,3,3], [2,1,1], [2,3,1] ผลลัพธ์ = 2 (เส้นทางแรกและสองเป็น pseudo-palindromic)วิธีแก้ปัญ

  7. ตรวจสอบว่าสตริงมีรหัสไบนารีขนาด K ครบทุกแบบใน C++

    สมมติว่าเรามีสตริงไบนารี s และจำนวนเต็ม k เราต้องตรวจสอบว่ารหัสไบนารีความยาว k ทุกแบบเป็น substring ของ s หรือไม่ตัวอย่าง: S = 00110110, k = 2 ผลลัพธ์ = true รหัสความยาว 2 คือ 00, 01, 10, 11 อยู่ที่ index 0,1,3,2 ตามลำดับวิธีแก้ปัญหา (Sliding Window + Hash Set) ใช้ sliding window ขนาด k เดินผ่าน s เ

  8. ตารางเรียน IV ใน C++

    สมมติว่ามี n วิชา หมายเลข 0 ถึง n-1 บางวิชามี prerequisite โดยตรง เช่น [1,0] หมายถึงต้องเรียน 1 ก่อน 0 กำหนด n, prerequisite pairs, และ queries เราต้องตอบว่า queries[i][0] เป็น prerequisite ของ queries[i][1] หรือไม่ (รวม indirect)ตัวอย่าง: n=3, prerequisites=[[1,2],[1,0],[2,0]], queries=[[1,0],[1,2]

  9. พื้นที่สูงสุดของชิ้นเค้กหลังตัดแนวนอนและแนวตั้งใน C++

    สมมติว่าเรามีเค้กสี่เหลี่ยมผืนผ้า สูง h กว้าง w มี horizontalCuts และ verticalCuts แสดงตำแหน่งการตัด เราต้องหาพื้นที่สูงสุดของชิ้นเค้กหลังตัดทุกตำแหน่ง คำตอบ modulo 10^9+7ตัวอย่าง: h=5, w=4, horizontalCuts=[1,2,4], verticalCuts=[1,3] ผลลัพธ์ = 4วิธีแก้ปัญหา เรียง horizontalCuts และ verticalCuts เพิ่

  10. จัดเส้นทางใหม่ให้ทุกเส้นทางนำไปสู่เมืองศูนย์กลางใน C++

    สมมติว่ามี n เมือง หมายเลข 0 ถึง n-1 และมี n-1 ถนน เชื่อมระหว่างเมืองคู่ใดคู่หนึ่งมีเพียงเส้นทางเดียว ถนนเป็น one-way เราต้องเปลี่ยนทิศทางถนนน้อยที่สุดเพื่อให้ทุกเมืองเดินทางไปยังเมือง 0 (เมืองหลวง) ได้ตัวอย่าง: n=6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]] ผลลัพธ์ = 3วิธีแก้ปัญหา (BFS + Graph)

  11. ค่า k ค่าที่แข็งแกร่งที่สุดในอาร์เรย์ใน C++

    |arr[j] - m| โดย m คือ median ของอาร์เรย์ หากระยะห่างเท่ากัน ค่าที่มากกว่าจะแข็งแกร่งกว่า เราต้องหา k ค่าที่แข็งแกร่งที่สุดตัวอย่าง: arr = [1,2,3,4,5], k = 2 median = 3 เรียงตามความแข็งแกร่ง: [5,1,4,2,3] ผลลัพธ์: [5,1]วิธีแก้ปัญหา เรียงอาร์เรย์ arr หา median m = arr[(n-1)/2] ใช้ two-pointer: i ชี้ซ้

  12. ประโยคที่มีความหมายเหมือนกันใน C++

    สมมติว่าเรามีรายการคู่คำที่มีความหมายเท่ากัน (synonyms) และประโยค text เราต้องหาประโยคที่เป็นไปได้ทั้งหมดที่มีความหมายเหมือนกัน เรียงตามลำดับ dictionaryตัวอย่าง: synonyms = [[happy,joy],[sad,sorrow],[joy,cheerful]], text = I am happy today but was sad yesterday ผลลัพธ์: 6 ประโยควิธีแก้ปัญหา ใช้ Unio

  13. พลิก Binary Tree กลับหัวใน C++

    สมมติว่าเรามี binary tree ที่โหนดขวาทั้งหมดเป็น leaf nodes ที่มี sibling หรือว่างเปล่า เราต้องพลิกมันกลับหัว (upside down) ให้โหนดขวาเดิมกลายเป็น left leaf nodes คืนค่า root ใหม่ตัวอย่าง: อินพุต [1,2,3,4,5] ผลลัพธ์: [4,5,2,#,#,3,1]วิธีแก้ปัญหา (Recursive) ฟังก์ชัน solve(node, parent, sibling) base

  14. สตริงยาวที่สุดที่มีตัวอักษรต่างกันสูงสุด 2 ตัวใน C++

    สมมติว่าเรามีสตริง s เราต้องหาความยาวของ substring ยาวที่สุด t ที่มีตัวอักษรที่แตกต่างกันได้สูงสุด 2 ตัวตัวอย่าง: eceba ผลลัพธ์ = 3 เพราะ t = ece ความยาว 3วิธีแก้ปัญหา (Sliding Window) ใช้ hash map นับจำนวนตัวอักษรใน window ขยาย window ด้วย pointer j ถ้าตัวอักษรต่างกัน > k ให้ย่อ window ด้วย poin

  15. ระยะห่างการแก้ไขหนึ่งครั้งใน C++

    สมมติว่าเรามีสตริงสองสตริง s และ t เราต้องตรวจสอบว่าทั้งสองอยู่ห่างกันเพียงหนึ่งการแก้ไข (one edit distance) การแก้ไขหนึ่งครั้งมี 3 ประเภท: แทรกตัวอักษรเข้า s เพื่อได้ t ลบตัวอักษรจาก s เพื่อได้ t แทนที่ตัวอักษรใน s เพื่อได้ tตัวอย่าง: s = ab, t = acb ผลลัพธ์ = trueวิธีแก้ปัญหา ให้ n = |s|, m = |t|

  16. ช่วงที่หายไปใน C++

    สมมติว่าเรามีอาร์เรย์จำนวนเต็มที่เรียงแล้ว nums ช่วงขององค์ประกอบอยู่ในช่วงรวม [lower, upper] เราต้องหาช่วงที่หายไป99]วิธีแก้ปัญหา ลบค่าซ้ำใน nums (ถ้ามี) ใช้ตัวแปร curr เริ่มจาก lower เปรียบเทียบ curr กับ nums[i]: เท่ากัน: curr++, i++ ไม่เท่ากัน: นับช่วงที่หายไปจนกว่าจะเจอ nums[i] หรือครบ upper

  17. กลับลำดับคำในสตริง II ใน C++

    สมมติว่าเรามีสตริงนำเข้าหนึ่งสตริง เราต้องกลับลำดับคำในสตริงทีละคำตัวอย่าง: อินพุต [t,h,e, ,m,a,n, ,i,s, ,n,i,c,e] ผลลัพธ์: [n,i,c,e, ,i,s, ,m,a,n, ,t,h,e]วิธีแก้ปัญหา กลับอาร์เรย์ทั้งหมด เดินผ่านอาร์เรย์ กลับแต่ละคำทีละคำเมื่อเจอช่องว่าง กลับคำสุดท้ายตัวอย่างโค้ด C++#include <bits/stdc++.h>

  18. ระยะทางสั้นที่สุดระหว่างคำ II ใน C++

    สมมติว่ามีคลาสที่รับรายการคำในคอนสตรัคเตอร์ มีเมธอดที่รับ word1 และ word2 เพื่อหาระยะทางสั้นที่สุด เมธอดนี้จะถูกเรียกหลายครั้งกับพารามิเตอร์ที่ต่างกันตัวอย่าง: words = [practice, makes, perfect, skill, makes], word1 = skill, word2 = practice ผลลัพธ์ = 3วิธีแก้ปัญหา ในคอนสตรัคเตอร์: สร้าง map เก็บตำแ

  19. ระยะทางสั้นที่สุดระหว่างคำ III ใน C++

    สมมติว่าเรามีรายการคำ และอีกสองคำคือ word1 และ word2 เราต้องหาระยะทางสั้นที่สุดระหว่างสองคำนี้ในรายการ word1 และ word2 อาจเป็นคำเดียวกันก็ได้ และแสดงถึงคำสองคำที่ต่างกันในรายการตัวอย่าง: words = [practice, makes, perfect, skill, makes], word1 = makes, word2 = skill ผลลัพธ์ = 1วิธีแก้ปัญหา เก็บตำแหน่

  20. เลขสโทรโบกรاماتิก II ใน C++

    สมมติว่าเรามีความยาว n เราต้องหาเลขสโทรโบกรاماتิก (strobogrammatic numbers) ทั้งหมดที่มีความยาว nเลขสโทรโบกรاماتิกคือเลขที่ดูเหมือนเดิมเมื่อหมุน 180 องศา คู่ตัวเลขที่ใช้ได้คือ: 0↔0, 1↔1, 8↔8, 6↔9, 9↔6ตัวอย่าง: n = 2 ผลลัพธ์: [11,69,88,96]วิธีแก้ปัญหา เริ่มจากฐาน: ถ้า n คี่ ให้เริ่มจาก [0,1,8] มิฉะนั

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