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