程序在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