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

    มีอาร์เรย์ jobs เวลาแต่ละงาน และ k คนงาน แบ่งงานให้แต่ละคน 1 งาน เวลาทำงานของคน = ผลรวมงานที่ได้รับ หา ค่าสูงสุดของเวลาทำงาน ที่น้อยที่สุด (makespan) ตัวอย่าง: jobs=[2,1,3,8,5], k=2 ผลลัพธ์ 10 (คน1: 2+5+3=10, คน2: 1+8=9) วิธีแก้ปัญหา (Backtracking + Pruning) เรียง jobs ใหญ่ไปเล็ก มอบ k งานแรกให้คนแ

  2. โปรแกรมหาลำดับการแสตมป์สตริงเป้าหมายใน Python

    มีสตริงเป้าหมาย t เริ่มต้นเป็น ? ทุกตัว มีแสตมป์ s แต่ละครั้งวางแสตมป์ทับ ? ได้ ต้องหาลำดับดัชนีที่วางแสตมป์ (ซ้ายสุดของแสตมป์) ถ้าไม่ได้คืนลิสต์ว่าง ตัวอย่าง: s=abcd, t=abcdbcd ผลลัพธ์ [3,0] วิธีแก้ปัญหา (ย้อนกลับ: จากเป้าหมายไปสู่ทั้งหมดเป็น ?) ถ้า len(s)==1 กรณีพิเศษ วนลูปจน t กลายเป็นทั้งหมด ?:

  3. โปรแกรมหาค่าใช้จ่ายน้อยที่สุดในการรวมก้อนหินใน Python

    มี N กองหิน เรียงติดกัน กอง i มี stones[i] ก้อน แต่ละครั้งรวม K กองติดกันเป็น 1 กอง ค่าใช้จ่าย = ผลรวมหินใน K กองนั้น หาค่าใช้จ่ายรวมน้อยที่สุดรวมเป็น 1 กอง (ถ้าไม่ได้คืน -1) ตัวอย่าง: nums=[3,2,4,1], K=2 ผลลัพธ์ 20 วิธีแก้ปัญหา (DP ก้อน) ถ้า (n-1) % (K-1) != 0 คืน -1 dp[i][j] = ค่าใช้จ่ายน้อยที่สุ

  4. โปรแกรมตรวจสอบว่าสตริงแบ่งเป็น 3 พาลินโดรมได้หรือไม่ใน Python

    ได้รับสตริง s ต้องตรวจสอบว่าแบ่งเป็น 3 ส่วนที่เป็นพาลินโดรม (palindrome) ทุกส่วนได้หรือไม่ ตัวอย่าง: s=levelpopracecar ผลลัพธ์ True (level, pop, racecar) วิธีแก้ปัญหา (Dynamic Programming) สร้างตาราง dp[n][n] ว่า s[i:j+1] เป็นพาลินโดรมหรือไม่ เติม dp[i][j] = True ถ้า =j หรือ s[i]==s[j] and dp[i+1][

  5. โปรแกรมหาค่าใช้จ่ายน้อยที่สุดในการจ้างงาน k คนใน Python

    มีอาร์เรย์ quality และ wage สำหรับแต่ละคน จ้าง K คน โดยจ่ายเงินเดือน: อัตราส่วนตาม quality ทุกคนได้อย่างน้อย wage[i] หาเงินรวมน้อยที่สุด ตัวอย่าง: quality=[10,22,5], wage=[70,52,30], K=2 ผลลัพธ์ 105.0 (จ้างคน 1 และ 3 จ่าย 70 และ 35) วิธีแก้ปัญหา (Greedy + Heap) คำนวณ ratio = wage/quality เรียงตาม

  6. โปรแกรมหาจำนวนคนน้อยที่สุดที่ต้องสอนภาษาใน Python

    มี n ภาษา, languages[i] = ภาษาที่คน i รู้, friendships = คู่เพื่อน สอนภาษา 1 ภาษาให้บางคน เพื่อให้เพื่อนทุกคู่สื่อสารได้ ต้องหาจำนวนคนน้อยที่สุดที่ต้องสอน ตัวอย่าง: n=3, languages=[[2],[1,3],[1,2],[3]], friendships=[[1,4],[1,2],[3,4],[2,3]] ผลลัพธ์ 2 (สอนภาษา 3 ให้คน 1 และ 3) วิธีแก้ปัญหา หาคู่เพื่

  7. โปรแกรมถอดรหัส permutation ที่ถูก XOR ใน Python

    ได้รับอาร์เรย์ enc มีอาร์เรย์ perm เป็น permutation ของจำนวนเต็มบวก n ตัวแรก (n คี่) เข้ารหัสโดย enc[i] = perm[i] XOR perm[i+1] ต้องหา perm เดิม ตัวอย่าง: enc=[2,5,6,3] ผลลัพธ์ [7,5,0,6,5] วิธีแก้ปัญหา n := len(enc), result := [0]*(n+1) x := XOR ของ 1..n+1 result[0] := x XOR enc[i] สำหรับ i คี่ (1,

  8. โปรแกรมเปลี่ยนตัวอักษรน้อยที่สุดเพื่อให้ผ่านเงื่อนไขหนึ่งในสามใน Python

    ได้รับสตริง s, t ตัวพิมพ์เล็ก ใน 1 การดำเนินการ เปลี่ยนตัวอักษรใน s หรือ t ได้เป็นตัวพิมพ์เล็กใดๆ ต้องทำให้ผ่านเงื่อนไข 1 ใน 3: ทุกตัวใน s น้อยกว่าทุกตัวใน t อย่างเคร่งครัด ทุกตัวใน t น้อยกว่าทุกตัวใน s อย่างเคร่งครัด ทั้ง s และ t มีตัวอักษรชนิดเดียวเท่านั้น หาจำนวนการดำเนินการน้อยที่สุด ตัวอย่าง:

  9. โปรแกรมหาค่า XOR ของพิกัดที่ใหญ่เป็นอันดับ k ใน Python

    ได้รับเมทริกซ์ m×n และค่า k ค่าของพิกัด (a,b) คือ XOR ของ matrix[i][j] ทุกคู่ 0<=i<=a, 0<=j<=b ต้องหาค่าที่ใหญ่เป็นอันดับ k (1-indexed) ของทุกพิกัด ตัวอย่าง: matrix=[[5,2],[1,6]], k=1 ผลลัพธ์ 7 (พิกัด (0,1): 5 XOR 2 = 7) วิธีแก้ปัญหา คำนวณ prefix XOR แนวนอน แล้วค่อยแนวตั้ง ใช้ dictionary seen เก็บค

  10. โปรแกรมหาระยะห่างระหว่างสองโหนดในต้นไม้แบนารีใน Python

    ได้รับต้นไม้แบนารี (binary tree) ต้องหาระยะห่าง (จำนวนเส้นเชื่อม) ระหว่างโหนดสองตัว ตัวอย่าง: ต้นไม้จาก [5,3,7,2,4,6,8] ระยะห่างระหว่าง 2 และ 8 คือ 4 (เส้น: 2-3, 3-5, 5-7, 7-8) วิธีแก้ปัญหา หา LCA (Lowest Common Ancestor) ของโหนดทั้งสอง หาความห่างจาก LCA ไปแต่ละโหนดด้วย BFS ผลรวมทั้งสองคือระยะห่าง

  11. โปรแกรมกู้คืนอาร์เรย์จากคู่ที่อยู่ติดกันใน Python

    ได้รับอาร์เรย์ 2D adPair ขนาด n-1 ที่ adPair[i]=[ui,vi] หมายถึง ui,vi ติดกันในอาร์เรย์ nums (มี n ค่า unique) ต้องคืนอาร์เรย์ nums เดิม ตัวอย่าง: adPair=[[3,2],[4,5],[4,3]] ผลลัพธ์ [2,3,4,5] วิธีแก้ปัญหา สร้าง my_map adjacency list จาก adPair หาจุดเริ่มต้น: โหนดที่มี neighbor เพียง 1 ตัว สร้าง nums

  12. โปรแกรมหาผลรวมซับอาร์เรย์สูงสุดหลังยกกำลังสองหนึ่งตัวใน Python

    ได้รับอาร์เรย์ตัวเลข สามารถทำการดำเนินการได้ครั้งเดียว: เลือก array[i] แทนที่ด้วย array[i]^2 ต้องหาผลรวมซับอาร์เรย์สูงสุดที่เป็นไปได้ (ซับอาร์เรย์ไม่ว่าง) ตัวอย่าง: array = [4,1,-2,-1] ผลลัพธ์ 17 (ยกกำลังสอง 4→16 ซับอาร์เรย์ [16,1] ผลรวม 17) วิธีแก้ปัญหา (Dynamic Programming) dp1 := [-inf] (max sub

  13. โปรแกรมออกแบบคิวที่ย้ายสมาชิกที่ใช้ล่าสุดไปท้ายคิวใน Python

    ออกแบบคิวเริ่มต้น 1..n มีฟังก์ชัน solve(k) ย้ายค่าที่ตำแหน่ง k ไปท้ายคิว และคืนค่าที่อยู่ท้ายคิวหลังย้าย ตัวอย่าง: n=5, เรียก solve(5), solve(2), solve(3), solve(1) ผลลัพธ์ 5,2,4,1 วิธีแก้ปัญหา (Square Root Decomposition) แบ่งข้อมูลเป็นบล็อกขนาด sqrt(n) เก็บ data (ลิสต์ของบล็อก) และ index (ตำแหน่งเ

  14. โปรแกรมหาอาคารที่มองเห็นได้ (ไม่ถูกบัง) ใน Python

    ได้รับอาร์เรย์ heights ความสูงอาคาร ต้องหาดัชนีของอาคารที่ไม่ถูกบังโดยอาคารสูงกว่าด้านขวา (มองจากขวาไปซ้าย) ตัวอย่าง: heights = [5,6,8,7] ผลลัพธ์ [2,3] (อาคารดัชนี 2,3 ไม่ถูกบัง) วิธีแก้ปัญหา res := [], h := 0 วน i จากขวาไปซ้าย: ถ้า h: res.append(i), h = heights[i] คืน res[::-1] ตัวอย่างโค้ด

  15. โปรแกรมจัดเรียงวลีตามความถี่ที่ปรากฏในประโยคใน Python

    ได้รับลิสต์ phrases และ sentences ต้องนับความถี่ที่แต่ละวลีใน phrases ปรากฏใน sentences แล้วจัดเรียง phrases จากมากไปน้อย ตัวอย่าง: phrases=[strong,durable,efficient], sentences=[...] ผลลัพธ์ [efficient,durable,strong] วิธีแก้ปัญหา cnt := dict เริ่มต้นทุกค่าเป็น 0 วน response ใน sentences: s := se

  16. โปรแกรมหาจำนวนคู่ซับสตริงที่เท่ากันใน Python

    ได้รับสตริงสองตัว ต้องหาจำนวน quadruple (p,q,r,s) ที่: 0 <= p <= q <= len(firstString) 0 <= r <= s <= len(secondString) ซับสตริง firstString[p:q+1] == secondString[r:s+1] q - r น้อยที่สุดเท่าที่จะเป็นไปได้ ตัวอย่าง: firstString=hgfn, secondString=gfrt ผลลัพธ์ 2 (คู่ (1,1,0,0) และ (2,2,1,1)) วิธีแก

  17. โปรแกรมหาจำนวนคำเชิญที่ถูกตอบรับใน Python

    สมมติว่ามี m หนุ่ม n สาว (m=n) มีงานปาร์ตี้ แต่ละหนุ่มต้องไปกับสาวคนละคน หนุ่มเชิญสาวทั้งหมด สาวรับเชิญได้คนละ 1 ราย ให้หาจำนวนคำเชิญที่ถูกตอบรับสูงสุด ให้มาในรูปเมทริกซ์ m×n ที่ grid[i][j]=1 หมายถึงหนุ่ม i เชิญสาว j ตัวอย่าง: เมทริกซ์ 3×3 ผลลัพธ์ 3 วิธีแก้ปัญหา (Maximum Bipartite Matching - DFS) ฟ

  18. โปรแกรมหาจำนวนค่าต่อเนื่องสูงสุดที่ทำได้จากเหรียญใน Python

    สมมติว่ามีอาร์เรย์ coins แทนเหรียญที่มี เราสามารถสร้างค่า x ได้ถ้าเลือกเหรียญบางส่วนรวมกันได้ x ต้องหาจำนวนค่าต่อเนื่องสูงสุดตั้งแต่ 0 ที่ทำได้ ตัวอย่าง: coins = [1,1,3,4] ผลลัพธ์ 10 (ทำได้ 0..9) วิธีแก้ปัญหา (Greedy) เรียง coins ans := 1 วน coin ใน coins: ถ้า ans: break ans += coin คืน ans เห

  19. โปรแกรมแบ่งอาร์เรย์เป็นสองช่วงที่ไม่ทับซ้อนใน Python

    สมมติว่ามีอาร์เรย์ nums ต้องแบ่งเป็น left และ right ที่: ทุกค่าใน left ≤ ทุกค่าใน right ทั้งสองไม่ว่าง left มีขนาดน้อยที่สุด คืนความยาวของ left ตัวอย่าง: nums = [5,0,3,8,6] ผลลัพธ์ 3 (left=[5,0,3], right=[8,6]) วิธีแก้ปัญหา mx := None, temp := None, nmx := None, temp2 := 0 วน i ใน nums: ถ้า mx i

  20. โปรแกรมหาค่าสูงสุดที่ดัชนีกำหนดในอาร์เรย์ที่มีข้อจำกัดใน Python

    สมมติว่ามีค่า n, index, maxSum ต้องหา nums[index] สูงสุดโดยอาร์เรย์ nums ต้องผ่านเงื่อนไข: ขนาด n ทุกค่าบวก |nums[i] - nums[i+1]| <= 1 ผลรวมไม่เกิน maxSum nums[index] สูงสุด ตัวอย่าง: n=6, index=3, maxSum=8 ผลลัพธ์ 2 (อาร์เรย์ [1,2,2,2,1,1]) วิธีแก้ปัญหา (Binary Search) left := maxSum//n, right :

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:364/451  20-คอมพิวเตอร์/Page Goto:1 358 359 360 361 362 363 364 365 366 367 368 369 370