Python中标签中的最大值
假设我们有一组项目:第i个项目具有值value[i]和标签label[i]。然后,我们将取这些项目的子集S,使得-
|S|<=num_wanted
对于每个标签L,带有标签L的S中存在的项目数为<=use_limit。
我们必须找到子集S的最大可能和。
例如,如果输入是类似值=[5,4,3,2,1],标签是[1,1,2,2,3],num_wanted=3,use_limit=1,那么输出将是9这是因为在第一,第三和第五项中选择了子集。
为了解决这个问题,我们将遵循以下步骤-
制作一个数组v
对于i,范围为0到值的长度
将[值[i],标签[i]]插入v
对v数组排序
ans:=0,使用:=空映射,而i:=0
而num_wanted和i<v的长度
将num_wanted减少1
ans:=ans+v[i,0]
使用量[v[i,1]]增加1
将num_wanted减少1
ans:=ans+v[i,0]
使用[v[i,1]]:=1
如果使用映射中不存在v[i,1]
elseuse[v[i,1]]<use_limit
使我增加1
返回ans
让我们看下面的实现以更好地理解-
示例
class Solution(object): def largestValsFromLabels(self, values, labels, num_wanted, use_limit): v = [] for i in range(len(values)): v.append([values[i],labels[i]]) v = sorted(v,key = lambda v:v[0],reverse=True) ans = 0 use = {} i = 0 while num_wanted and i < len(v): if v[i][1] not in use: num_wanted -=1 ans+=v[i][0] use[v[i][1]] = 1 elif use[v[i][1]]<use_limit: num_wanted -=1 ans+=v[i][0] use[v[i][1]]+=1 i+=1 return ans ob = Solution()print(ob.largestValsFromLabels([5,4,3,2,1],[1,1,2,2,3],3,1))
输入项
[5,4,3,2,1] [1,1,2,2,3] 3 1
输出结果
9