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

Chương trình tìm số xuất hiện nhiều nhất sau k gia số trong python

Giả sử chúng ta có một danh sách các số được gọi là num và một giá trị khác là k. Hãy để chúng tôi xem xét một hoạt động trong đó chúng tôi tăng một số phần tử lên một. Chúng ta có thể thực hiện nhiều nhất k lần, chúng ta phải tìm giá trị của số xuất hiện thường xuyên nhất mà chúng ta có thể nhận được. Nếu có nhiều hơn một giải pháp, hãy chọn số nhỏ nhất có thể.

Vì vậy, nếu đầu vào giống như nums =[1, 0, 0, 0, 8, 8, 8, 8] k =8, thì đầu ra sẽ là 8, vì chúng ta có thể tăng 1, 7 lần để có 8, và tăng bất kỳ 0 đến 1, do đó, chúng tôi nhận được [8, 1, 0, 0, 8, 8, 8, 8]. Vậy kết quả là 8.

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

  • sắp xếp các số trong danh sách
  • thấp:=0, cao:=0
  • dist:=0, tốt nhất:=0
  • ret:=-1
  • while high
  • nếu high> 0 và nums [high] không giống như nums [high - 1], thì
    • dist:=dist + (high - low) * (nums [high] - nums [high - 1])
  • cao:=cao + 1
  • while dist> k, do
    • dist:=dist - nums [high - 1] - nums [low]
    • thấp:=low + 1
  • nếu cao - thấp> tốt nhất, thì
    • tốt nhất:=cao - thấp
    • ret:=nums [high - 1]
  • trả lời lại

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

Mã mẫu

class Solution:
   def solve(self, nums, k):
      nums.sort()
      low, high = 0, 0
      dist = 0
      best = 0
      ret = -1
      while high < len(nums):
         if high > 0 and nums[high] != nums[high - 1]:
            dist += (high - low) * (nums[high] - nums[high - 1])
            high += 1
            while dist > k:
               dist -= nums[high - 1] - nums[low]
               low += 1
               if high - low > best:
                  best = high - low
                  ret = nums[high - 1]
               return ret

ob = Solution()
nums = [1, 0, 0, 0, 8, 8, 8, 8]
k = 8
print(ob.solve(nums, k))

Đầu vào

[1, 0, 0, 0, 8, 8, 8, 8], 8

Đầu ra

8