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

    มีอาร์เรย์ ต้องหาผลรวมถ่วงน้ำหนัก (weighted sum) สูงสุดเมื่อหมุนเวียนอาร์เรย์ น้ำหนักคือ S = Σ i * nums[i] (1-indexed) ตัวอย่าง: L=[5,3,4] ผลลัพธ์ 26 (หมุนเป็น [3,4,5]: 1×3+2×4+3×5=26) วิธีแก้ปัญหา (O(n) Formula) sum_a = sum(nums) cur = ans = Σ nums[i]*(i+1) วน i=0..n-1: cur = cur - sum_a + nums[i]

  2. โปรแกรมตรวจสอบว่าสถานีตรวจจับ k ตัวเพียงพอหรือไม่ใน Python

    มีโมดูลเซ็นเซอร์ตรวจจับรัศมี r มีจุดบนเส้นรูปวงกลมที่ต้องตรวจจับ วางโมดูลต่ำพลัง k ตัว ตรวจสอบว่าตรวจจับจุดทั้งหมดได้หรือไม่ ตัวอย่าง: j=4 (r^2), k=3 ผลลัพธ์ False (มี 4 จุดบนเส้นรูปวงกลม ต้องการอย่างน้อย 4 ตัว) วิธีแก้ปัญหา นับจุดจำนวนเต็ม (lattice points) บนเส้นรูปวงกลม x^2 + y^2 = j วน i นับคู่

  3. โปรแกรมสลับโหนดใน Linked List ใน Python

    มี linked list L และค่า k สลับโหนดที่ k จากต้นกับโหนดที่ k จากท้าย คืน linked list ที่แก้ไขแล้ว ตัวอย่าง: L=[1,5,6,7,1,6,3,9,12], k=3 ผลลัพธ์ [1,5,3,7,1,6,6,9,12] (โหนดที่ 3 จากต้นคือ 6, จากท้ายคือ 3) วิธีแก้ปัญหา (Two Pointers) เดิน k-1 ก้าวได้ firstNode secondNode เริ่มที่ head, เดินคู่กับ temp จ

  4. โปรแกรมคำนวณ kpr sum สำหรับทุกคิวรีใน Python

    มีอาร์เรย์ nums และคิวรี queries[i]=[k,p,r] คำนวณ: kpr_sum = Σ_{i=P}^{R-1} Σ_{j=i+1}^{R} (K XOR (A[i] XOR A[j])) มอดุลลอ 10^9+7 ตัวอย่าง: nums=[1,2,3], queries=[[1,1,3],[2,1,3]] ผลลัพธ์ [5,4] วิธีแก้ปัญหา (Bitwise Prefix Sum) คำนวณ prefix sum ของบิตแต่ละตำแหน่ง (0..19) ของ nums แต่ละคิวรี: นับจำนวน

  5. โปรแกรม Python ตรวจสอบเลขแปลก (Weird) หรือไม่

    มีตัวเลข n ตรวจสอบว่าเป็น Weird หรือไม่ โดยเงื่อนไข: เลขคี่ → Weird เลขคู่ และอยู่ในช่วง 2-5 → Not Weird เลขคู่ และอยู่ในช่วง 6-20 → Weird 20 → Not Weird ตัวอย่าง: n=18 ผลลัพธ์ Weird ตัวอย่างโค้ด 1 and n 6 and n < 21: return Weird n = 18 print(solve(n)) อินพุต 18 เอาต์พุต Weird

  6. โปรแกรมลด Hamming Distance หลังสลับได้ใน Python

    มีอาร์เรย์ src, tgt ความยาวเท่ากัน และ allowedSwaps คู่ดัชนีที่สลับได้ไม่จำกัดครั้ง หา Hamming distance น้อยที่สุดหลังสลับใน src ได้อย่างไรก็ตาม ตัวอย่าง: src=[2,3,4,5], tgt=[3,2,5,6], allowedSwaps=[[0,1],[2,3]] ผลลัพธ์ 1 วิธีแก้ปัญหา (Union-Find + Counter) Union-Find รวมดัชนีที่สลับได้เป็นกลุ่ม (c

  7. โปรแกรมหา Tuple ที่มีผลคูณเท่ากันใน Python

    มีอาร์เรย์ nums ค่า unique บวก หาจำนวน tuple (a,b,c,d) ที่ a*b = c*d และ a,b,c,d ต่างกันทุกตัว ตัวอย่าง: nums=[2,3,4,6] ผลลัพธ์ 8 (8 permutations ของคู่ (2,6) และ (3,4)) วิธีแก้ปัญหา นับความถี่ของผลคูณทุกคู่ dic[nums[i]*nums[j]]++ สำหรับแต่ละความถี่ v: จำนวนคู่ที่เลือกได้ 2 คู่จาก v คู่ = C(v,2) แ

  8. โปรแกรมหาซับแมทริกซ์ใหญ่สุดหลังจัดเรียงคอลัมน์ใน Python

    มีเมทริกซ์ไบนารี m×n สามารถเรียงคอลัมน์ได้อย่างไรก็ตาม หาพื้นที่ซับแมทริกซ์ที่เป็น 1 ทั้งหมดใหญ่สุด ตัวอย่าง: เมทริกซ์ 3×3 ผลลัพธ์ 4 (หลังสลับคอลัมน์ได้ 2×2 ทั้งหมดเป็น 1) วิธีแก้ปัญหา คำนวณความสูงสะสม (histogram) ทุกคอลัมน์: matrix[i][j] += matrix[i-1][j] ถ้าเป็น 1 แต่ละแถว เรียงคอลัมน์จากน้อยไปมา

  9. โปรแกรมหาเส้นทางสั้นที่สุดไปยังเป้าหมายในกริดใน Python

    ได้กริดมีสัญลักษณ์: #=เป้าหมาย, O=ทางเดิน, *=ตำแหน่งเริ่มต้น, X=บล็อก หาจำนวนก้าวน้อยที่สุดไปถึง # (4 ทิศทาง) ไม่ถึงได้คืน -1 ตัวอย่าง: กริด 4×4 ผลลัพธ์ 2 วิธีแก้ปัญหา (BFS) หาตำแหน่งเริ่มต้น * BFS แบบระดับ (level-order) ขยาย 4 ทิศทาง เจอ # คืนระดับปัจจุบัน หมดคิวไม่เจอ คืน -1 ตัวอย่างโค้ด def sol

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

    มีห้องพัก n ห้อง (0..n-1) นักเรียนขอย้าย requests[i]=[from, to] ไม่มีห้องว่าง คำขอจะดำเนินการได้ก็ต่อเมื่อมีคนย้ายเข้ามาแทนที่ หาจำนวนคำขอสูงสุดที่ตอบสนองได้ ตัวอย่าง: n=3, requests=[[0,2],[1,0],[2,1]] ผลลัพธ์ 3 (เป็น cycle) วิธีแก้ปัญหา (Brute Force Subsets) ลอง subset ของคำขอจากใหญ่ไปเล็ก (k = le

  11. โปรแกรมหาการดำเนินการบิต 1 น้อยที่สุดเพื่อทำให้จำนวนเป็นศูนย์ใน Python

    มีจำนวน n ต้องทำให้เป็น 0 ด้วยการดำเนินการ: เลือกบิตขวาสุด (LSB) กลับค่า กลับบิตที่ i ถ้าบิต i-1 เป็น 1 และบิต i-2 ถึง 0 เป็น 0 ทั้งหมด หาจำนวนการดำเนินการน้อยที่สุด ตัวอย่าง: n=6 (110) ผลลัพธ์ 4 (110→010→011→001→000) วิธีแก้ปัญหา (Gray Code / Binary Reflection) แปลง n เป็นบิต สร้าง m โดย: m[i] =

  12. โปรแกรมหาจำนวนวิธีสร้างสตริงเป้าหมายจากพจนานุกรมใน Python

    มีลิสต์ words ความยาวเท่ากัน และสตริง target สร้าง target จากซ้ายไปขวา: ตัวอักษรที่ i ของ target ใช้ตัวอักษรที่ k ของ word[j] ได้ถ้าเท่ากัน และหลังใช้ k แล้ว ห้ามใช้ตำแหน่ง ≤ k ของ word ใดๆ อีก หาจำนวนวิธี (มอด 10^9+7) ตัวอย่าง: words=[pqqp,qppq], target=qpq ผลลัพธ์ 4 วิธีแก้ปัญหา (DP + Memoization)

  13. โปรแกรมแจกจ่ายจำนวนเต็มซ้ำใน Python

    มีอาร์เรย์ nums (ค่า unique ≤ 50) และ quantity[i] = จำนวนที่ลูกค้า i สั่ง ต้องแจกจ่ายให้: ลูกค้า i ได้ quantity[i] ชิ้นพอดี ค่าที่ลูกค้า i ได้ ต้องเหมือนกันทุกชิ้น ลูกค้าทุกคนพอใจ ตัวอย่าง: nums=[5,1,2,2,3,4,4,3,3], quantity=[2,2,3] ผลลัพธ์ True วิธีแก้ปัญหา (Backtracking บนความถี่ของความถี่) cnt

  14. โปรแกรมลดค่าเบี่ยงเบน (deviation) ของอาร์เรย์ใน Python

    มีอาร์เรย์ nums สามารถทำได้ไม่จำกัดครั้ง: เลขคู่หาร 2, เลขคี่คูณ 2 หา deviation (max - min) น้อยที่สุดที่เป็นไปได้ ตัวอย่าง: nums=[6,3,7,22,5] ผลลัพธ์ 5 (กลายเป็น [6,6,7,11,10] deviation = 11-6=5) วิธีแก้ปัญหา (Two-phase Heap) คูณ 2 ให้เลขคี่ทั้งหมด (ทำให้เป็นคู่หมด) → min-heap ขยายค่าต่ำสุด (pop,

  15. โปรแกรมตรวจสอบเส้นทางที่มีข้อจำกัดความยาวในกราฟใน Python

    มีกราฟไม่มีทิศทาง น้ำหนัก n โหนด edgeList[i]=(u,v,w) และคิวรี (p,q,lim) ถามว่ามีเส้นทางจาก p ไป q ระยะทาง < lim หรือไม่ คืน True/False แต่ละคิวรี ตัวอย่าง: ผลลัพธ์ [True, False, True] วิธีแก้ปัญหา (Union-Find + Offline) เรียง edgeList ตามน้ำหนัก เรียงคิวรีตาม lim Union-Find เพิ่ม edge ทีละเส้นจนน้ำ

  16. โปรแกรมหาจำนวนการสลับติดกันน้อยที่สุดเพื่อได้ 1 ติดกัน k ตัวใน Python

    มีอาร์เรย์ไบนารี nums และค่า k แต่ละครั้งสลับตำแหน่งติดกันได้ หาจำนวนการสลับน้อยที่สุดให้มี 1 ติดกัน k ตัว ตัวอย่าง: nums=[1,0,0,1,0,1,0,1], k=3 ผลลัพธ์ 2 วิธีแก้ปัญหา (Sliding Window บนตำแหน่งของ 1) เก็บตำแหน่งของ 1 ใน loc ใช้ sliding window ขนาด k บน loc คำนวณการสลับขั้นต่ำด้วย median trick: val

  17. โปรแกรมหา XOR สูงสุดกับสมาชิกในอาร์เรย์สำหรับแต่ละคิวรีใน Python

    มีอาร์เรย์ nums และคิวรี queries[i]=(xi, mi) คำตอบคิวรีที่ i = ค่า XOR สูงสุดของ xi กับสมาชิกใน nums ที่ ≤ mi (ถ้าไม่มีคืน -1) ตัวอย่าง: nums=[0,1,2,3,4], queries=[[3,1],[1,3],[5,6]] ผลลัพธ์ [3,3,7] วิธีแก้ปัญหา (Bitwise Trie + Offline) เรียง nums และ queries ตาม limit สร้าง prefix set ทีละบิต (31.

  18. โปรแกรมหาค่า K สำหรับ K-Similar Strings ใน C++

    สองสตริง s, t เรียกว่า K-similar ถ้าสลับตัวอักษรใน s ทั้งหมด K ครั้ง ได้ t หา K น้อยที่สุด (s, t เป็น anagram กัน) ตัวอย่าง: s=abc, t=bac ผลลัพธ์ 1 วิธีแก้ปัญหา (BFS) ถ้า A==B คืน 0 BFS จาก A ระดับ lvl: ดึงสตริง curr หา i แรกที่ curr[i]!=B[i] ลองสลับ curr[i] กับ curr[j]i) ที่ curr[j]==B[i] และ cur

  19. โปรแกรมนับจำนวน subsequence ที่แตกต่างกันใน Python

    ได้รับสตริง s ต้องนับจำนวน subsequence ที่แตกต่างกัน (distinct) คำตอบมอดุลลอ 10^9+7 ตัวอย่าง: s=bab ผลลัพธ์ 6 (subsequences: a,b,ba,ab,bb,abb) วิธีแก้ปัญหา dp[i] = จำนวน subsequence ใหม่ที่ลงท้ายด้วย s[i] dp[i] = 1 + sum(dp[0..i-1]) ถ้า s[i] ไม่เคยเจอก่อน มิฉะนั้น sum(dp[last_occurrence..i-1]) คืน

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