Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python
Python
  1. นับ Subarray ของ Permutation 1..N ที่มี Median เท่ากับ M ใน Python

    นับ Subarray ที่ Median = M จาก Permutation 1..N กำหนดอาร์เรย์ A เป็น Permutation ของ 1..N และตัวเลข M หาจำนวน Subarray ที่ Median เท่ากับ M (Median ของความยาวคู่ = ตัวซ้ายของกลางสองตัว) ตัวอย่าง: A=[3,5,6,4,2], M=5 → Subarrays: [3,5,6], [5], [5,6], [5,6,4] → 4 ตัว อัลกอริทึม O(N) ใช้ Prefix Balanc

  2. หาลำดับงานจาก Dependency Graph (Topological Sort) ใน C++

    Topological Sort สำหรับ Task Scheduling กำหนด n งาน (0 ถึง n-1) และ Prerequisite pairs [u, v] หมายถึงต้องทำ v ก่อน u หาลำดับงานที่ถูกต้อง (Topological Order) หากมี Cycle ให้คืนอาร์เรย์ว่าง อัลกอริทึม DFS + Cycle Detection สร้าง Adjacency List จาก Prerequisites DFS ทุกโหนดที่ยังไม่ได้เยี่ยม:

  3. สร้างเมทริกซ์ต้นฉบับจากค่าสูงสุดแถวและคอลัมน์พร้อม Binary Matrix ใน Python

    สร้างเมทริกซ์ต้นฉบับจาก Max Row/Column และ Binary Mask กำหนดอาร์เรย์ A (ค่าสูงสุดแต่ละแถว), B (ค่าสูงสุดแต่ละคอลัมน์) และ Binary Matrix mat ที่ 1 = มีค่าบวก, 0 = เป็น 0 ต้องสร้างเมทริกซ์ต้นฉบับที่สอดคล้อง: mat[i][j] = min(A[i], B[j]) ถ้า mat[i][j]==1 มิฉะนั้น 0 โค้ดตัวอย่าง Python def print_origin

  4. หาผู้ชนะเกมจัดเรียงตัวอักษรให้เป็นพาลินโดรมก่อนใน Python

    เกมจัดเรียงสตริงให้เป็นพาลินโดรม ผู้ทำได้ก่อนชนะ สตริง S ตัวพิมพ์เล็ก สองผู้เล่นสลับกันเล่น กฎ: ผู้เล่นชนะได้ทันทีหากในตอนของเขา สามารถจัดเรียงตัวอักษรของสตริงให้เป็นพาลินโดรมได้ (ไม่ต้องลบตัวอักษร) ผู้เล่น 1 เริ่มก่อน ทั้งคู่เล่นอย่างเหมาะสมที่สุด ตัวอย่าง: pqpppq → ผู้เล่น 1 ชนะ (จัดเป็น ppqqpp)

  5. หาตำแหน่งกล่องที่ลูกบอลแต่ละลูกวางได้จากอาร์เรย์แถวและลำดับลูกบอลใน Python

    หาแถวและคอลัมน์ของกล่องสำหรับแต่ละลูกบอล กำหนดอาร์เรย์ A ขนาด = จำนวนแถว A[i] = จำนวนกล่องในแถว i, อาร์เรย์ B = หมายเลขลูกบอล (ลำดับการวางตั้งแต่ 1) หาตำแหน่ง (แถว, คอลัมน์) ของแต่ละลูกบอล ตัวอย่าง: A=[3,4,5,6], B=[1,3,5,2] → [(1,1),(1,3),(2,2),(1,2)] วิธีแก้ คำนวณ Prefix Sum ของ A → A[i] = จำนว

  6. หาความน่าจะเป็นของสถานะใน Markov Chain ที่เวลา T ใน Python

    ความน่าจะเป็นสถานะ Markov Chain ที่เวลา T กำหนด Markov Chain เป็นกราฟมีทิศทาง โหนด = สถานะ ขอบ = ความน่าจะเป็นการเปลี่ยนสถานะ (ผลรวมขอบออกจากโหนด = 1) ใช้เวลา 1 หน่วยต่อการเคลื่อนที่ หาความน่าจะเป็นไปถึงสถานะ F ที่เวลา T เริ่มจาก S ที่เวลา 0 Dynamic Programming O(N * T * E) dp[state][time] = ควา

  7. หาจำนวนเต็มบวกน้อยที่สุดที่ไม่สามารถเป็นผลรวม Subset ของอาร์เรย์ที่เรียงแล้วได้ใน Python

    Smallest Positive Integer Not Representable as Subset Sum กำหนดอาร์เรย์ A ที่เรียงจากน้อยไปมากและมีค่าบวกทั้งหมด หาจำนวนเต็มบวกน้อยที่สุดที่ ไม่สามารถ สร้างได้จากผลรวมของ Subset ใดๆ ของ A ทำได้ใน O(N) ตัวอย่าง: A = [1, 4, 8, 12, 13, 17] → ผลลัพธ์ = 2 แนวคิด เก็บค่า answer = ค่าที่ยังสร้างไม่ได้น้อย

  8. หา Substring สั้นที่สุดที่มีตัวอักษรครบทุกตัวของสตริงอีกตัวใน Python

    Minimum Window Substring กำหนดสตริง s1 (หลัก) และ s2 (รูปแบบ) หา Substring สั้นที่สุดใน s1 ที่มีตัวอักษรครบทุกตัวของ s2 (ตามจำนวนครั้งที่ปรากฏ) ตัวอย่าง: s1=I am a student, s2=mdn → m a studen อัลกอริทึม Sliding Window (O(N)) นับความถี่ตัวอักษรใน s2 → hash_pat ขยายหน้าต่างด้านขวา (j) จนครบทุกต

  9. หาผลรวมของ Truncatable Primes ที่น้อยกว่า N ใน Python

    Truncatable Primes และผลรวมน้อยกว่า N Truncatable Prime คือจำนวนเฉพาะที่ยังคงเป็นเฉพาะเมื่อตัดหลักซ้ายทีละหลัก (Left-truncatable) และตัดหลักขวาทีละหลัก (Right-truncatable) ตัวอย่าง: 9137 → 9137, 137, 37, 7 (ซ้าย) และ 9137, 913, 91, 9 (ขวา) แต่ 9 ไม่ใช่เฉพาะ → 9137 ไม่ใช่ Truncatable Prime จริง (ตัวอ

  10. หาผลรวมของความต่าง Max-Min จากทุก Subset ของอาร์เรย์ใน Python

    Sum of (max - min) over all Subsets กำหนดอาร์เรย์ A ขนาด n (อาจมีค่าซ้ำ) ต้องการหา Σ (max(S) - min(S)) สำหรับทุก Subset S ของ A ตัวอย่าง: A = [1, 3, 4] → Subsets: {1},{3},{4},{1,3},{1,4},{3,4},{1,3,4} → ผลรวม = 9 สูตรคณิตศาสตร์ (O(N log N)) เรียงอาร์เรย์ A จากน้อยไปมาก สำหรับแต่ละ A[i]: เป็น max

  11. หาความต่าง Min-Max ของ Triplet จาก 3 อาร์เรย์ที่เรียงแล้วใน Python

    Minimize max(A[i],B[j],C[k]) - min(A[i],B[j],C[k]) จาก 3 อาร์เรย์เรียงลำดับ กำหนดอาร์เรย์ 3 ตัว A, B, C ที่เรียงจากน้อยไปมาก (ขนาดอาจต่างกัน) ต้องหา Triplet (a,b,c) ที่ทำให้ max(a,b,c) - min(a,b,c) น้อยที่สุด ตัวอย่าง: A=[2,5,6,9,11], B=[7,10,16], C=[3,4,7,7] → เลือก 6,7,7 → ความต่าง = 1 อัลกอริทึม

  12. หาค่าผลรวมที่ทำให้อาร์เรย์แบ่งเป็น Subarray ผลรวมเท่ากันได้ใน Python

    หา Sum ทั้งหมดที่ทำให้อาร์เรย์แบ่งเป็น Subarray ผลรวมเท่ากันได้ กำหนดอาร์เรย์ A ต้องการหาค่า sum ทั้งหมดที่ทำให้สามารถแบ่ง A เป็น Subarray ต่อเนื่องหลายๆ ตัวที่ทุกตัวมีผลรวมเท่ากับ sum นั้นได้ ตัวอย่าง: A = [2,4,2,2,2,4,2,6] → ผลลัพธ์ [6, 8, 12] แนวคิด คำนวณ Prefix Sum ทั้งอาร์เรย์ ผลรวมทั้งหม

  13. หาพื้นที่ผิวของรูปทรง 3 มิติจากเมทริกซ์ความสูงใน Python

    คำนวณพื้นที่ผิวของรูปทรง 3 มิติจาก Height Map กำหนดเมทริกซ์ N x M ที่ A[i][j] = ความสูงของอาคารที่ตำแหน่ง (i,j) ต้องการหาพื้นที่ผิวรวมของรูปทรง 3 มิตินี้ สูตร: พื้นที่ผิว = ผลรวมของความต่างความสูงระหว่างเซลล์ติดกัน (แนวตั้งและแนวนอน) + พื้นที่ด้านบนและด้านล่าง (2*N*M) อัลกอริทึม วนทุกเซลล์ (i, j

  14. หาเวลาที่เป็นพาลินโดรมและมาหลังเวลาที่กำหนดใน Python

    หาเวลาปาลินโดรมถัดไปในรูปแบบ 24 ชั่วโมง กำหนดเวลาในรูปแบบ HH:MM (00-23:00-59) ต้องการหาเวลาถัดไปที่อ่านเป็นพาลินโดรม (เช่น 22:22 → 23:32) หากไม่มีให้คืน -1 แนวคิด เวลาปาลินโดรมในรูปแบบ HH:MM ต้องเป็นรูป AB:BA คือ นาทีต้องเป็นการกลับตัวเลขของชั่วโมง แยกชั่วโมง h และนาที m คำนวณ rev_h = int(str(

  15. หาต้นทุนน้อยที่สุดในการตัดกระดานเป็นสี่เหลี่ยมจัตุรัสใน Python

    Minimum Cost to Cut Board into Squares กระดานขนาด p x q ต้องตัดเป็น p*q สี่เหลี่ยมจัตุรัสขนาด 1x1 ต้นทุนการตัดแต่ละขอบกำหนดให้ (Horizontal cuts และ Vertical cuts) ต้องการหาลำดับการตัดที่ให้ต้นทุนรวมน้อยที่สุด ตัวอย่าง: X_slice = [3,2,4,2,5] (ต้นทุนตัดแนวนอน), Y_slice = [5,2,3] (ต้นทุนตัดแนวตั้ง) → ต

  16. หาผู้ชนะเกมเพิ่มความต่างคู่ตัวเลขในอาร์เรย์จนไม่สามารถทำได้ใน Python

    เกมเพิ่ม |a-b| ลงอาร์เรย์ ผู้ที่ไม่สามารถเพิ่มได้แพ้ กำหนดอาร์เรย์ A ของจำนวนเต็มบวกที่ไม่ซ้ำกัน สองผู้เล่น P และ Q สลับกันเลือกคู่ (a, b) จากอาร์เรย์ หาก |a-b| ไม่อยู่ในอาร์เรย์ ให้เพิ่มเข้าไป ผู้ที่ไม่สามารถหาคู่ใหม่ได้แพ้ P เริ่มก่อน ตัวอย่าง: A = [8, 9, 10] → P ชนะ สังเกตสำคัญ เซตตัวเลขที่เกิดข

  17. จำนวนการตัดสูงสุดบนกระดานหมากรุกที่ไม่ทำให้แยกเป็น 2 ส่วนใน Python

    ตัดกระดานหมากรุกไม่ให้แยกเป็น 2 ส่วน กำหนดกระดานขนาด M x N ต้องการหาจำนวนการตัด (Cut) สูงสุดที่ทำได้ โดยที่กระดานยังคงต่อเนื่องเป็นชิ้นเดียว (ไม่แยกเป็น 2 ส่วน) สูตร: (M - 1) * (N - 1) เหตุผล: กระดานมี M*N ช่อง สามารถตัดขอบระหว่างช่องได้ทั้งหมด M*(N-1) + N*(M-1) ขอบ เพื่อไม่ให้แยกส่วน ต้องเหลือขอบอย

  18. หาผู้ชนะเกมวอลเลย์บอลจากสตริงไบนารีใน Python

    ทำนายผู้ชนะจากสตริงคะแนนแบบไบนารี สตริงไบนารีแทนคะแนนเกมวอลเลย์บอล: 1 = ทีมเราทำคะแนนได้, 0 = ทีมเราเสียคะแนน กฎการชนะ: ทีมไหนทำได้ 15 คะแนนก่อน ชนะ (ยกเว้นเมื่อทั้งคู่ทำได้ 14 คะแนน) ถ้าทั้งคู่ทำได้ 14 คะแนน ต้องนำหน้าอีก 2 คะแนนถึงจะชนะ อัลกอริทึม นับคะแนนทีมเรา (score_cnt[1]) และคู่แข่ง

  19. หาจำนวนขอบน้อยที่สุดที่ต้องเพิ่มเพื่อสร้าง Euler Circuit ในกราฟไม่มีทิศทาง Python

    Euler Circuit และการเพิ่มขอบน้อยที่สุด Euler Circuit คือเส้นทางที่ผ่านทุกขอบของกราฟทีละขอบ และกลับมายังจุดเริ่มต้น กราฟไม่มีทิศทางมี Euler Circuit ได้ก็ต่อเมื่อ: กราฟเชื่อมต่อ (Connected) ทุกโหนดมีดีกรีเป็นเลขคู่ โจทย์: หาจำนวนขอบขั้นต่ำที่ต้องเพิ่มเพื่อให้กราฟมี Euler Circuit แนวคิดการแก้ปัญ

  20. หาสามตัวเลขจากสามอาร์เรย์ต่างกันที่ผลรวมเท่ากับค่าที่กำหนดใน Python

    ตรวจสอบว่ามี Triplet จาก 3 อาร์เรย์ที่ผลรวมเท่า Sum หรือไม่ กำหนดอาร์เรย์ 3 ตัว A, B, C และค่า sum ต้องการทราบว่ามี triplet (a, b, c) ที่ a ∈ A, b ∈ B, c ∈ C และ a + b + c = sum หรือไม่ ตัวอย่าง: A=[2,3,4,5,6], B=[3,4,7,2,3], C=[4,3,5,6,7], sum=12 → True (4+2+6=12) วิธีแก้ง่ายที่สุด (Brute Force O(

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:164/451  20-คอมพิวเตอร์/Page Goto:1 158 159 160 161 162 163 164 165 166 167 168 169 170