Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

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

สมมติว่ามีรายการ nums และค่า k, target ต้องการหาจำนวนสับลิสต์ขนาด k ที่ค่าเฉลี่ยมากกว่าหรือเท่า target

ตัวอย่าง: nums = [1, 10, 5, 6, 7], k = 3, target = 6 ผลลัพธ์คือ 2 สับลิสต์ [1, 10, 7] ค่าเฉลี่ย 6 และ [10, 5, 6] ค่าเฉลี่ย 7

ขั้นตอนการแก้ปัญหา

  1. ปรับ target = target * k (เปรียบเทียบผลรวมแทนค่าเฉลี่ย)
  2. sum = 0, ans = 0
  3. วนลูปแต่ละ index i และค่า n:
    • ถ้า i >= k: sum -= nums[i - k] (เลื่อน sliding window)
    • sum += n
    • ถ้า i >= k - 1 และ sum >= target: ans += 1
  4. คืนค่า ans

ตัวอย่างโค้ด

class Solution:
    def solve(self, nums, k, target):
        target *= k
        sum = 0
        ans = 0
        for i, n in enumerate(nums):
            if i >= k:
                sum -= nums[i - k]
            sum += n
            if i >= (k - 1):
                if sum >= target:
                    ans += 1
        return ans

ob = Solution()
nums = [1, 10, 5, 6, 7]
k = 3
target = 6
print(ob.solve(nums, k, target))

อินพุต

[1, 10, 5, 6, 7], 3, 6

เอาต์พุต

2