程序在python中增加k后找到最常出现的数字

假设我们有一个称为nums的数字列表,另一个值为k。让我们考虑一个将元素增加一个的操作。我们最多可以执行k次,我们必须找到可以获取的最频繁出现的数字的值。如果有多个解决方案,请选择最小的数量。

因此,如果输入类似于nums = [1、0、0、0、8、8、8、8] k = 8,则输出将为8,因为我们可以增加1、7倍以获得8,并且将0增至1,则得到[8,1,0,0,8,8,8,8]。所以结果是8。

为了解决这个问题,我们将按照以下步骤操作:

  • 排序列表编号

  • 低:= 0,高:= 0

  • dist:= 0,最佳:= 0

  • ret:= -1

  • 而高<nums大小,

    • 最佳:=高-低

    • ret:= nums [high-1]

    • dist:= dist-nums [high-1]-nums [low]

    • 低:=低+ 1

    • dist:= dist +(高-低)*(nums [high]-nums [high-1])

    • 如果high> 0并且nums [high]与nums [high-1]不同,则

    • 高:=高+ 1

    • 当dist> k时

    • 如果高-低>最佳,则

    • 返回ret

    让我们看下面的实现以更好地理解:

    范例程式码

    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))

    输入项

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

    输出结果

    8