Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình lên lịch cho các tác vụ chiếm lượng thời gian nhỏ nhất bằng Python

Giả sử chúng ta có một danh sách các giá trị được gọi là nhiệm vụ trong đó mỗi giá trị khác nhau đại diện cho một loại nhiệm vụ khác nhau và chúng ta cũng có một số nguyên k không âm. Mỗi nhiệm vụ cần một phút để hoàn thành, nhưng chúng ta phải đợi k phút giữa việc thực hiện hai nhiệm vụ cùng loại. Bất cứ lúc nào, chúng ta có thể thực hiện một nhiệm vụ hoặc chờ đợi. Chúng tôi phải tìm khoảng thời gian nhỏ nhất để hoàn thành tất cả các nhiệm vụ.

Vì vậy, nếu đầu vào giống như nums =[2, 2, 2, 3, 3, 2], k =1, thì đầu ra sẽ là 7, vì thứ tự tối ưu là [2, 3, 2, 3, 2, ĐANG CHỜ, 2].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • c:=tổng số tất cả các giá trị tính bằng nums

  • ans:=0, kéo dài:=0

  • trong khi c là khác 0, thực hiện

    • lastize:=kích thước của c

    • đối với mỗi giá trị x trong các giá trị (k + 1) chung nhất của c, thực hiện

      • c [x]:=c [x] - 1

        • nếu c [x] giống 0 thì

          • loại bỏ c [x]

    • ans:=ans + k + 1

  • return ans + lastize - (k + 1)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution:
   def solve(self, nums, k):
      from collections import Counter
      c = Counter(nums)
      ans = 0
      lastsize = 0
      while c:
         lastsize = len(c)
         for x, _ in c.most_common(k + 1):
            c[x] -= 1
            if c[x] == 0:
               del c[x]
         ans += k + 1
      return ans + lastsize - (k + 1)
ob1 = Solution()
nums = [2, 2, 2, 3, 3, 2]
k = 1
print(ob1.solve(nums, k))

Đầu vào

[2, 2, 2, 3, 3, 2], 1

Đầu ra

7