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

    มีรายการ nums แบ่งเป็นสับลิสต์ เรียงแต่ละสับลิสต์ แล้วรวมกันได้รายการเรียงทั้งหมด หาจำนวนสับลิสต์มากที่สุด เช่น nums=[4,3,2,1,7,5] ให้ 2 แบ่ง [4,3,2,1] และ [7,5] ขั้นตอนการแก้ปัญหา เปรียบเทียบ prefix sum ของ nums กับ sorted(nums) ทุกครั้งที่ prefix sum เท่ากัน = จบสับลิสต์ได้ นับจุดตัด ตัวอย่างโค

  2. โปรแกรมตรวจสอบว่ารายการแบ่งคู่ได้ผลรวมหาร k ลงตัวใน Python

    มีรายการ nums และ k ตรวจสอบว่าแบ่งเป็นคู่ได้ทุกคู่ ที่ผลรวมหาร k ลงตัว เช่น nums=[4,7,2,5], k=6 ให้ True คู่ (4,2) และ (7,5) ผลรวม 6 และ 12 หาร 6 ลงตัว ขั้นตอนการแก้ปัญหา ถ้าจำนวนสมาชิกคี่ คืน False นับความถี่ modulo k ใน count count[0] ต้องเป็นคู่ สำหรับ i=1 ถึง k//2: count[i] == count[k-i] ผ่านท

  3. โปรแกรมหาสถานะห้องจำคุกหลัง k วันใน Python

    มีรายการไบนารีแทนห้องจำคุก 1=มีคน 0=ว่าง ทุกวัน: ถ้าเพื่อนบ้านซ้ายขวาเหมือนกัน (ทั้งคู่ 1 หรือทั้งคู่ 0) กลายเป็น 1 มิฉะนั้น 0 ห้องแรกและสุดท้ายเป็น 0 ตลอด หาสถานะหลัง k วัน เช่น nums=[1,0,1,0,0,0,0,0], k=1 ให้ [0,1,1,0,1,1,1,0] ขั้นตอนการแก้ปัญหา ฟังก์ชัน next_day_state: สร้าง new_cells, เซ็ทหัวท

  4. โปรแกรมหาจำนวน quadruple ที่แตกต่างกันให้ผลรวมเท่ากับ target ใน Python

    มี 4 รายการ A,B,C,D และ target หาจำนวน quadruple (i,j,k,l) ที่ A[i]+B[j]+C[k]+D[l] = target เช่น A=[5,4,3] B=[8,4] C=[6,2] D=[4,10] target=23 ให้ 3 ขั้นตอนการแก้ปัญหา Meet-in-the-middle: คำนวณผลรวม A+B ทุกคู่ เก็บความถี่ใน m วนทุกคู่ C+D: หา target - (C[k]+D[l]) ใน m รวมความถี่ ตัวอย่างโค้ด class

  5. โปรแกรมกู้คิวคนที่สับสนกลับมาใน Python

    มีเมทริกซ์แถวละ [height, count] count=คนหน้าที่สูงกว่าหรือเท่า คิวถูกสับ หาลำดับเดิม เช่น [[2,2],[4,0],[5,0]] ให้ [[4,0],[5,0],[2,2]] ขั้นตอนการแก้ปัญหา เรียงตาม height น้อยไปมาก, count มากไปน้อย สร้าง ans ขนาด N เติม None สำหรับแต่ละคน (h,c): หาตำแหน่งที่ว่างและมีคนสูงกว่า/เท่าอยู่หน้าพอดี c คน

  6. โปรแกรมแปลง Gray Code สำหรับตัวเลขที่กำหนดใน Python

    มีตัวเลข n หา Gray code ของ n (nth Gray code) Gray code เรียงเลขไบนารีที่ติดกันต่าง 1 บิต เช่น n=12 (1100) ให้ 10 (1010) ขั้นตอนการแก้ปัญหา สูตร: 1) หรือแบบ Reclusive หากำลังสอง ใหญ่สุด ≤ n เรียกว่า x gray(n) = x + gray(2*x - n - 1) Base case: n=0 คืน 0 ตัวอย่างโค้ด class Solution: def solve

  7. โปรแกรมหาสตริงหลังลบตัวอักษรซ้ำ k ติดกันใน Python

    มีสตริง s และ k ลบ k ตัวอักษรซ้ำติดกันที่พบก่อนซ้ำจนไม่มีแล้ว คืนสตริงท้ายสุด เช่น s=paaappmmmma, k=3 ให้ ma (ลบ aaa→ppp→mmm) ขั้นตอนการแก้ปัญหา วนลูปจนไม่มีการลบ: หาตัวอักษรที่มี k ตัวติดกันใน s แทนที่ k ตัวนั้นด้วย นับจำนวนครั้งที่ลบ ถ้า 0 หยุด ตัวอย่างโค้ด class Solution: def solve(self,

  8. โปรแกรมตรวจสอบว่าอัปเดตดัชนีรายการด้วยผลรวมปัจจุบันถึง target ได้หรือไม่ใน Python

    มีรายการ target เริ่มจาก X เป็็น 1 ทุกตัว ทำซ้ำ: เลือก i ตั้ง X[i] = sum(X) ตรวจสอบว่าได้ target หรือไม่ เช่น target=[5,9,3] ให้ True: [1,1,1]→[1,1,3]→[5,1,3]→[5,9,3] ขั้นตอนการแก้ปัญหา ถ้าความยาว 1: ต้องเป็น [1] Max-heap (เก็บค่าลบ) ของ target วน: pop ค่ามากสุด x, d = sum-x 1 ไม่อย่างนั้น 1) อัปเ

  9. โปรแกรมประเมินนิพจน์ Ternary ใน C++

    มีนิพจน์ Ternary ประกอบ T, F, ?, : ประเมินผลลัพธ์ (T/F) กลุ่มขวาไปซ้าย เช่น T?T?F:T:T ให้ F ขั้นตอนการแก้ปัญหา อ่านสตริงจากขวาไปซ้าย ใช้ Stack เจอ ? : pop ?, first=pop, pop :, second=pop ถ้าตัวอักษรปัจจุบัน T push first มิฉะนั้น push second มิฉะนั้น push ตัวอักษรปัจจุบัน ท้ายสุด pop ทั้ง stack รวม

  10. โปรแกรมกลับโหนดภายใน Linked List ใน Python

    มี Linked List และ i, j กลับลำดับโหนดจาก i ถึง j คืน head ใหม่ เช่น [1,2,3,4,5,6,7,8,9] i=2 j=6 ให้ [1,2,7,6,5,4,3,8,9] ขั้นตอนการแก้ปัญหา สร้าง dummy node prev_head ชี้ head เดินไปหาโหนดก่อน i (rev_before) และโหนด i (rev_end) กลับโหนดจาก i ถึง j แบบ iterative (3 pointers) เชื่อม rev_before.next =

  11. โปรแกรมกลับลำดับคำที่คั่นด้วยตัวแบ่งใน Python

    มีสตริงและชุดตัวแบ่ง (delimiters) กลับลำดับคำ แต่คงตำแหน่งตัวแบ่งไว้ เช่น s=Computer/Network:Internet|tutorialspoint, delims=[/,:,|] ให้ tutorialspoint/Internet:Network|Computer ขั้นตอนการแก้ปัญหา ใช้ itertools.groupby แยกคำและตัวแบ่ง เก็บคำทั้งหมดใน list words วนอีกครั้ง: ถ้าเป็นตัวแบ่ง ใส่ต่อ ถ้

  12. โปรแกรมตรวจสอบว่าลำดับใบของต้นไม้สองต้นเหมือนกันหรือไม่ใน Python

    มีต้นไม้แบบทวิภาค 2 ต้น ตรวจสอบว่าลำดับใบ (left-to-right) เหมือนกันหรือไม่ เช่น ต้นไม้ทั้งคู่มีใบ [2,6] ให้ True ขั้นตอนการแก้ปัญหา Inorder traversal เก็บค่าใบ (โหนดที่ไม่มีลูก) ใน list เปรียบเทียบ list ทั้งสอง ตัวอย่างโค้ด class TreeNode: def __init__(self, data, left=None, right=None):

  13. โปรแกรมหาเวลาขั้นต่ำในการทำทุกงานใน Python

    มีรายการ nums เวลาแต่ละงาน ข้ามงานติดกันไม่ได้ (ต้องทำงานสลับกัน) หาเวลาน้อยที่สุดทำทั้งหมด เช่น nums=[11,6,8,16] ให้ 14 (ข้ามงานแรกและสุดท้าย ทำ 6+8) ขั้นตอนการแก้ปัญหา DP: table[i][0] = เวลาน้อยสุดถึง i ถ้าข้ามงาน i, table[i][1] = ทำงาน i table[0][0]=0, table[0][1]=nums[0] table[i][0] = table[i-

  14. โปรแกรมหาโหนดที่ลึกเป็นอันดับสองในต้นไม้แบบทวิภาคใน Python

    มีต้นไม้แบบทวิภาค หาความลึกของใบที่ลึกเป็นอันดับสอง (ถ้ามีใบลึกสุดหลายใบ ใบอันดับสองคือระดับถัดไป) รากลึก 0 เช่น ต้นไม้ที่มีโหนด 7,8 ลึกสุด ให้ 1 (โหนด 3) ขั้นตอนการแก้ปัญหา BFS ระดับต่อระดับ เก็บ nodes ของระดับปัจจุบัน ติดตาม prev (ลึกอันดับสอง) และ now (ลึกสุด) เมื่อเจอใบแรกในระดับ ให้อัปเดต pre

  15. โปรแกรมหาจำนวนรายการที่เหลือหลังขาย n ชิ้นใน Python

    มีรายการ items (ID สินค้า) และ n จำนวนที่ขายได้ หา ID ที่แตกต่างกันน้อยที่สุดหลังขาย n ชิ้น เช่น items=[2,2,6,6], n=2 ให้ 1 (ขาย 2 ตัว ID 2 หรือ 6 เหลือ ID เดียว) ขั้นตอนการแก้ปัญหา นับความถี่แต่ละ ID ใน c ans = จำนวน ID ที่แตกต่างกัน เรียงความถี่น้อยไปมาก ลบความถี่น้อยสุดออกจนกว่า n จะหมด ลด ans

  16. โปรแกรมจัดเรียง Linked List ให้เป็นลำดับน้อยไปมากใน Python

    มี Linked List จัดเรียงให้เป็นลำดับน้อยไปมาก เช่น [5,8,4,1,5,6,3] ให้ [1,3,4,5,5,6,8] ขั้นตอนการแก้ปัญหา เก็บค่าทุกโหนดใน list values เรียง values แปลงเป็น deque แล้วใส่ค่ากลับโหนดเดิมทีละตัว คืนค่า head ตัวอย่างโค้ด import collections class ListNode: def __init__(self, data, next=None):

  17. โปรแกรมพิมพ์สมาชิกเมทริกซ์แบบเกลียวใน Python

    มีเมทริกซ์ 2D พิมพ์สมาชิกแบบเกลียว: แถวแรกซ้ายขวา, คอลัมน์สุดท้ายบนล่าง, แถวสุดท้ายขวาซ้าย, คอลัมน์แรกล่างบน, ทำซ้ำ เช่น เมทริกซ์ 6x3 ให้ [7,10,9,1,3,4,5,11,9,9,2,9,6,2,9,2,1,7] ขั้นตอนการแก้ปัญหา กำหนดขอบเขต top, down, left, right และ direction (0=ขวา,1=ลง,2=ซ้าย,3=ขึ้น) วนจน top<=down and left<=

  18. โปรแกรมหาจำนวน quadruple ที่ผลรวมน้อยกว่า target จาก 4 รายการใน Python

    มี 4 รายการ A,B,C,D และ target หาจำนวน quadruple (i,j,k,l) ที่ A[i]+B[j]+C[k]+D[l] ≤ target เช่น A=[3,2] B=[5,3] C=[1] D=[2,3] target=9 ให้ 3 ขั้นตอนการแก้ปัญหา คำนวณผลรวมทุกคู่ A+B เก็บใน temp_list แล้วเรียง วนทุกคู่ C+D: หา sum_ab = target - (C[i]+D[j]) ใช้ bisect_right หาจำนวนใน temp_list ≤ sum

  19. โปรแกรมตรวจสอบว่าบล็อกสมมาตรตามเส้น y=x หรือไม่ใน Python

    มีรายการ nums แทนความสูงบล็อกสี่เหลี่ยม ตรวจสอบว่ารูปทรงสมมาตรตาม y=x หรือไม่ เช่น nums=[7,5,3,2,2,1,1] ให้ True ขั้นตอนการแก้ปัญหา Two pointers: i=0, j=len(nums)-1 ขณะ i <= j: h = nums[j] ขณะ i < h: ตรวจสอบ nums[i] == j+1 ไม่ใช่คืน False i++, j-- จบลูปคืน True ตัวอย่างโค้ด class Solution: de

  20. โปรแกรมตรวจสอบว่าสามารถเปิดห้องทั้งหมดได้หรือไม่ใน Python

    มี rooms รายการกุญแจในแต่ละห้อง ห้อง 0 เปิดอยู่ ตรวจสอบว่าเดินไปเปิดห้องอื่นได้หมดหรือไม่ เช่น rooms=[[2,0],[3],[1],[]] ให้ True (0→2→1→3) ขั้นตอนการแก้ปัญหา DFS/BFS จากห้อง 0: เก็บ ready ห้องที่จะไป, seen ห้องที่ไปแล้ว Pop ห้องจาก ready, เพิ่มกุญแจที่ยังไม่ได้ไปเข้า ready ท้ายสุดถ้า len(seen) ==

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:193/451  20-คอมพิวเตอร์/Page Goto:1 187 188 189 190 191 192 193 194 195 196 197 198 199