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

โปรแกรมหาค่าเฉลี่ยที่ใหญ่ที่สุดของรายการย่อยที่มีขนาดอย่างน้อย k ใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งคือ k เราต้องหาค่าเฉลี่ยที่ใหญ่ที่สุดของรายการย่อยของรายการที่มีความยาวอย่างน้อย k

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[2, 10, -50, 4, 6, 6] k =3 ผลลัพธ์จะเป็น 5.333333333 เนื่องจากรายการย่อย [4, 6, 6] จะมีค่าเฉลี่ยที่ใหญ่ที่สุด

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ซ้าย :=ต่ำสุด nums ขวา :=สูงสุด nums

  • s :=ผลรวมของตัวเลขทั้งหมดเป็น nums จากดัชนี 0 ถึง k − 1

  • ใหญ่ที่สุด_avg :=s / k

  • ขณะที่ซ้าย <=ขวา ทำ

    • กลาง :=จำนวนเต็มของ (ซ้าย + ขวา) / 2

    • sum1 :=s, เฉลี่ย :=s / k, sum2 :=0, cnt :=0

    • สำหรับฉันในช่วง k ถึงขนาดของ nums ทำ

      • sum1 :=sum1 + nums[i]

      • sum2 :=sum2 + nums[i − k]

      • cnt :=cnt + 1

      • avg :=สูงสุดของ avg และ (sum1 /(cnt + k))

      • ถ้า sum2 / cnt <=กลาง แล้ว

        • sum1 :=sum1 − sum2

        • cnt :=0, sum2 :=0

      • avg :=สูงสุดของ avg และ (sum1 /(cnt + k))

    • ใหญ่ที่สุด_avg :=สูงสุดของที่ใหญ่ที่สุด_เฉลี่ยและเฉลี่ย

    • ถ้าเฉลี่ย> กลาง แล้ว

      • ซ้าย :=กลาง + 1

    • มิฉะนั้น

      • ขวา :=กลาง − 1

  • ส่งคืนที่ใหญ่ที่สุด_avg

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, nums, k):
      left, right = min(nums), max(nums)
      s = sum(nums[:k])
      largest_avg = s / k
      while left <= right:
         mid = (left + right) // 2
         sum1 = s
         avg = s / k
         sum2 = 0
         cnt = 0
         for i in range(k, len(nums)):
            sum1 += nums[i]
            sum2 += nums[i − k]
            cnt += 1
            avg = max(avg, sum1 / (cnt + k))
            if sum2 / cnt <= mid:
               sum1 −= sum2
               cnt = 0
               sum2 = 0
            avg = max(avg, sum1 / (cnt + k))
         largest_avg = max(largest_avg, avg)
         if avg > mid:
            left = mid + 1
         else:
            right = mid − 1
      return largest_avg
ob = Solution()
nums = [2, 10, −50, 4, 6, 6]
k = 3
print(ob.solve(nums, k))

อินพุต

[2, 10, −50, 4, 6, 6], k = 3

ผลลัพธ์

5.333333333333333