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

    สมมติว่าเรามีต้นไม้ทวิภาค หาผลรวมสูงสุดของค่าโหนดที่เลือกได้ โดยไม่มีสองโหนดที่ติดกัน (parent-child) ถูกเลือกพร้อมกัน ตัวอย่าง: จากภาพ ผลลัพธ์ 17 (เลือก 10, 4, 3 ซึ่งไม่ติดกัน) ขั้นตอนการแก้ปัญหา (Tree DP) ฟังก์ชัน f(node) คืนค่าคู่ (take, not_take): ถ้า node เป็น None: คืนค่า (0, 0) (a, b) = f(

  2. โปรแกรมหาความยาวสูงสุดของสองคำที่ไม่มีตัวอักษรร่วมกันใน Python

    สมมติว่าเรามีรายการสตริงตัวพิมพ์เล็ก words หาผลรวมความยาวสูงสุดของสองคำที่ต่างกันและไม่มีตัวอักษรร่วมกัน ตัวอย่าง: words = [abcd, mno, abdcmno, amno] ผลลัพธ์ 7 (คำ abcd และ mno ไม่มีตัวอักษรซ้ำ รวมความยาว 4+3=7) ขั้นตอนการแก้ปัญหา (Bitmask) ฟังก์ชัน sign(word): value = 0 สำหรับแต่ละ c ใน word: v

  3. โปรแกรมรวม K ลิสต์ที่เรียงแล้วใน Python

    สมมติว่าเรามีหลายลิสต์ที่เรียงแล้ว ต้องรวมเป็นลิสต์เดียว ใช้ Heap data structure ตัวอย่าง: [[1,4,5], [1,3,4], [2,6]] ผลลัพธ์ [1,1,2,3,4,4,5,6] ขั้นตอนการแก้ปัญหา (Min Heap) n = len(lists) heap = [] สำหรับแต่ละ i, row ใน lists: ถ้า row ไม่ว่าง: ใส่ (row[0], i, 0) เข้า heap res = [] วนลูป while

  4. โปรแกรมหาจำนวนการลบน้อยที่สุดจากสองข้างเพื่อทำให้ลิสต์สมดุลใน Python

    สมมติว่าเรามีลิสต์มีแค่ 0 และ 1 สามารถลบจากหน้าหรือหลังได้ หาจำนวนการลบน้อยที่สุด ที่ทำให้ลิสต์ที่เหลือมีจำนวน 0 และ 1 เท่ากัน ตัวอย่าง: nums = [1, 1, 1, 0, 0, 1] ผลลัพธ์ 2 (ลบ 1 ตัวหน้า และ 1 ตัวท้าย เหลือ 1,1,0,0) ขั้นตอนการแก้ปัญหา (Prefix Sum + Hash Map) longest = 0 d = {0: -1} index แรก) cur

  5. โปรแกรมหาความต่างน้อยที่สุดระหว่างสองสมาชิกจากสองลิสต์ใน Python

    สมมติว่าเรามีสองลิสต์ L1 และ L2 หาความต่างน้อยที่สุดระหว่างตัวเลขจาก L1 และตัวเลขจาก L2 ตัวอย่าง: L1 = [2, 7, 4], L2 = [16, 10, 11] ผลลัพธ์ 3 (จาก 10 - 7 = 3) ขั้นตอนการแก้ปัญหา (Two Pointers หลังเรียงลำดับ) เรียง L1 และ L2 ans = infinity, i = j = 0 วนลูป while i < len(L1) และ j < len(L2): ans =

  6. โปรแกรมหาความต่างน้อยที่สุดระหว่าง max และ min หลังอัปเดตสูงสุด 3 ครั้งใน Python

    สมมติว่าเรามีรายการ nums มีการดำเนินการเปลี่ยนค่าสมาชิกเป็นค่าใดก็ได้ สูงสุด 3 ครั้ง หาความต่างน้อยที่สุดระหว่างค่าสูงสุดและต่ำสุดหลังอัปเดต ตัวอย่าง: nums = [2, 3, 4, 5, 6, 7] ผลลัพธ์ 2 (เปลี่ยนเป็น [4, 3, 4, 5, 4, 4] แล้ว 5-3=2) ขั้นตอนการแก้ปัญหา ถ้า len(nums) <= 4 คืนค่า 0 (เปลี่ยนทุกตัวให้เท

  7. โปรแกรมหาเวลาสูงสุดในการทำ K งานใน Python

    สมมติว่าเรามีเมทริกซ์งานแต่ละแถวมี 3 ค่า และค่า k เลือก k แถว เรียกว่า S ให้ผลรวมนี้น้อยที่สุด: max(S[:,0]) + max(S[:,1]) + max(S[:,2]) แต่ละคอลัมน์มีค่าใช้จ่ายคือค่าสูงสุดในคอลัมน์นั้นของ S ตัวอย่าง: tasks = [[2,3,3],[4,5,2],[4,2,3]], k = 2 ผลลัพธ์ 10 (เลือกแถว 1 และ 3: max(2,4)=4 + max(3,2)=3 + m

  8. โปรแกรมนับเซตย่อยไม่ว่างที่ผลรวม min และ max น้อยกว่า k ใน Python

    สมมติว่าเรามีรายการ nums และค่า k หาจำนวนเซตย่อยไม่ว่าง S ที่ min(S) + max(S) <= k เซตย่อยเป็น multiset (มีค่าซ้ำได้ เพราะอ้างอิง index ไม่ใช่ค่า) ตัวอย่าง: nums = [2, 2, 5, 6], k = 7 ผลลัพธ์ 6 เซตย่อยคือ [2], [2], [2,2], [2,5], [2,5], [2,2,5] ขั้นตอนการแก้ปัญหา (Two Pointers + Combinatorics) N =

  9. โปรแกรมหาผลรวมซับทรีที่พบบ่อยที่สุดในต้นไม้ทวิภาคใน Python

    สมมติว่าเรามีต้นไม้ทวิภาค ต้องหาผลรวมซับทรี (subtree sum) ที่พบบ่อยที่สุด ผลรวมซับทรีของโหนดคือผลรวมค่าทั้งหมดใต้โหนดนั้นรวมตัวมันด้วย ตัวอย่าง: จากภาพ ผลลัพธ์คือ 3 เพราะเกิดขึ้น 2 ครั้ง (โหนดใบซ้าย และผลรวม 3 - 6 + 6) ขั้นตอนการแก้ปัญหา count = defaultdict(int) ฟังก์ชัน getSum(node): ถ้า node เ

  10. โปรแกรมตรวจสอบว่าทุกคนมีเพื่อนอย่างน้อยหนึ่งคนหรือไม่ใน Python

    สมมติว่าเรามี n คน แทนด้วยตัวเลข 0 ถึง n-1 และลิสต์ friends ที่แต่ละคู่ [a, b] แสดงว่า a และ b เป็นเพื่อน ตรวจสอบว่าทุกคนมีเพื่อนอย่างน้อย 1 คนหรือไม่ ตัวอย่าง: n = 3, friends = [[0, 1], [1, 2]] ผลลัพธ์ True ขั้นตอนการแก้ปัญหา สร้างลิสต์ people ขนาด n เติม 0 สำหรับแต่ละ link ใน friends: people[l

  11. โปรแกรมหาจำนวนครั้งที่ต้องกระโดดน้อยที่สุดเพื่อถึงปลายอาร์เรย์ใน Python

    สมมติว่าเรามีอาร์เรย์ nums ค่าทุกตัวเป็นบวก เริ่มที่ index 0 แต่ละค่าแทนความยาวกระโดดสูงสุดที่ตำแหน่งนั้น เป้าหมายคือถึง index สุดท้าย (n-1) ด้วยจำนวนครั้งน้อยที่สุด ตัวอย่าง: [2,3,1,1,4] ผลลัพธ์ 2 (กระโดด 0→1, แล้ว 1→4) ขั้นตอนการแก้ปัญหา (Greedy) end = 0, jumps = 0, farthest = 0 วนลูป i จาก 0 ถ

  12. โปรแกรมนับจำนวนเกาะในเมทริกซ์ใน Python

    สมมติว่าเรามีเมทริกซ์ไบนารี ต้องหาจำนวนเกาะ (islands) โดย 1 = แผ่นดิน, 0 = น้ำ เกาะคือกลุ่ม 1 ที่ติดกัน (แนวนอน/แนวตั้ง ไม่ใช่แนวทแยง) และล้อมรอบด้วยน้ำ ตัวอย่างเมทริกซ์ 6x5 ผลลัพธ์คือ 4 เกาะ ขั้นตอนการแก้ปัญหา (DFS) ฟังก์ชัน explore(row, col, matrix): ถ้า row, col นอกขอบเขต หรือ matrix[row][col

  13. โปรแกรมนับจำนวนซับสตริงพาลินโดรมใน Python

    สมมติว่าเรามีสตริง s ต้องหาจำนวนซับสตริงพาลินโดรมใน s ตัวอย่าง: s = level ผลลัพธ์ 7 ซับสตริงพาลินโดรมคือ [l,e,v,e,l,eve,level] ขั้นตอนการแก้ปัญหา (Expand Around Center) ฟังก์ชัน check_palindrome(string, left, right): ans = 0 วนลูป while = 0 และ right < len(s): ถ้า s[left] == s[right]: ans += 1,

  14. โปรแกรมตรวจสอบว่าทุกซับสตริงพาลินโดรมมีความยาวคี่หรือไม่ใน Python

    สมมติว่าเรามีสตริง s ตรวจสอบว่าซับสตริงพาลินโดรมทุกตัวมีความยาวคี่หรือไม่ ตัวอย่าง: s = level ผลลัพธ์ True ขั้นตอนการแก้ปัญหา สังเกตว่า: ถ้ามีซับสตริงพาลินโดรมความยาวคู่ ต้องมีตัวอักษรติดกันซ้ำ 2 ตัว (เช่น aa ใน baab) ดังนั้น ตรวจสอบแค่ว่ามี s[i] == s[i-1] ไหม วนลูป i จาก 1 ถึง len(s)-1: ถ้า s[i

  15. โปรแกรมหาลิสต์ผลคูณของทุกสมาชิกยกเว้น index ปัจจุบันใน Python

    สมมติว่าเรามีรายการตัวเลข nums ต้องหาใหม่ลิสต์ที่แต่ละ index i เป็นผลคูณของทุกตัวในลิสต์เดิมยกเว้น index i ห้ามใช้การหาร ตัวอย่าง: nums = [2, 3, 4, 5, 6] ผลลัพธ์ [360, 240, 180, 144, 120] ขั้นตอนการแก้ปัญหา (Prefix & Suffix Product) ถ้า len(nums) < 1 คืนค่า nums l = len(nums), สร้าง left และ righ

  16. โปรแกรมตรวจสอบสองสตริงห่างกัน 0 หรือ 1 edit distance ใน Python

    สมมติว่าเรามีสตริง S และ T ตรวจสอบว่าระยะห่างการแก้ไข (edit distance) เป็น 0 หรือ 1 หรือไม่ การแก้ไขคือ ลบตัวอักษร เพิ่มตัวอักษร หรือแทนที่ตัวอักษร ตัวอย่าง: S = hello, T = hallo ผลลัพธ์ True (edit distance = 1) ขั้นตอนการแก้ปัญหา m = len(S), n = len(T), i = j = 0, count = 0 ถ้า 1 คืนค่า False ว

  17. โปรแกรมหาต้นทุนน้อยที่สุดในการรวมลิสต์ให้เหลือตัวเลขเดียวใน Python

    สมมติว่าเรามีรายการตัวเลข nums เราสามารถลดความยาวได้โดยเลือก 2 ตัว นำออก และต่อผลรวมท้ายรายการ ต้นทุนคือผลรวมของสองตัวที่นำออก หาต้นทุนรวมน้อยที่สุดจนเหลือ 1 ตัว ตัวอย่าง: nums = [2, 3, 4, 5, 6] ผลลัพธ์ 45 (2+3=5, 4+5=9, 6+5=11, 9+11=20, รวม 5+9+11+20=45) ขั้นตอนการแก้ปัญหา (Min Heap / Huffman Cod

  18. โปรแกรมหาช่วงที่ต้องเพิ่มน้อยที่สุดเพื่อรวมช่วงทั้งหมดเป็นหนึ่งช่วงใน Python

    สมมติว่าเรามีลิสต์ 2 มิติ intervals แต่ละแถวคือ [start, end] (รวม) สำหรับช่วง [a, b] (a < b) ขนาดคือ (b - a) เราต้องเพิ่มช่วงหนึ่งช่วงเข้าไปในลิสต์ ที่ทำให้หลังรวมช่วงทั้งหมดได้ช่วงเดียวพอดี หาขนาดน้อยที่สุดของช่วงที่เพิ่ม ตัวอย่าง: intervals = [[15, 20], [30, 50]] ผลลัพธ์คือ 10 เพราะเพิ่ม [20, 30]

  19. โปรแกรมรวมสมาชิกติดกันที่เหมือนกันเป็นซับลิสต์ใน Python

    สมมติว่าเรามีรายการตัวเลข nums เราต้องรวมสมาชิกติดกันที่มีค่าเท่ากันเป็นซับลิสต์ แม้จะมีเพียง 1 ครั้งก็ต้องอยู่ในซับลิสต์ของตัวเอง ตัวอย่าง: nums = [5, 5, 2, 7, 7, 7, 2, 2, 2, 2] ผลลัพธ์คือ [[5, 5], [2], [7, 7, 7], [2, 2, 2, 2]] ขั้นตอนการแก้ปัญหา ถ้า nums ว่าง คืนค่าลิสต์ว่าง result = [[nums[0]]

  20. โปรแกรมเติมสีด้วยการดำเนินการ flood fill ใน Python

    Flood fill บนกริด 2 มิติ: ให้กริดสี r,g,b เริ่มที่ (r,c) เปลี่ยนสีพื้นที่ที่เชื่อมต่อ (4 ทิศทาง) และมีสีเดิมเดียวกัน ให้เป็นสี target ตัวอย่าง: เริ่ม (0,0) สี r เปลี่ยนเป็น g → ทุก r ที่ติดกันกลายเป็น g อัลกอริธึม DFS Recursive เก็บ oldcolor = สีที่ตำแหน่งเริ่มต้น DFS จาก (r,c): ถ้าอยู่ในกริด ยังไม

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:180/451  20-คอมพิวเตอร์/Page Goto:1 174 175 176 177 178 179 180 181 182 183 184 185 186