
给你两个二维整数数组 items1 和 items2 ,表示两个物品集合。每个数组 items 有以下特质:
items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ,weighti 表示第 i 件物品的 重量 。
items 中每件物品的价值都是 唯一的 。
请你返回一个二维数组 ret,其中 ret[i] = [valuei, weighti], weighti 是所有价值为 valuei 物品的 重量之和 。注意:ret 应该按价值 升序 排序后返回。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-similar-items
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:找到value相同的,把weight加上就行了
python3实现:
class Solution:
def cal(self, target, dic_final):
for couple in target:
if couple[0] in dic_final:
dic_final[couple[0]] += couple[1]
else:
dic_final[couple[0]] = couple[1]
def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
# 题意:找到values相等的将weight相加并返回
dic_final = {}
self.cal(items1,dic_final)
self.cal(items2,dic_final)
result = []
# 价值升序排列
k = list(dic_final.keys())
k.sort()
for each in k:
result.append([each,dic_final[each]])
return result

感觉有点慢啊,看看怎么优化。
class Solution:
def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
items_combine = items1 + items2
values_list = [couple[0] for couple in items_combine]
weight_list = [couple[1] for couple in items_combine]
dic_values_count = collections.Counter(values_list)
# 直接将values排序了,后来就无需再排序
k = list(dic_values_count.keys())
k.sort()
# 找到value相同的索引,然后用索引将对应weight加起来就行了
result = []
for each in k:
weight_tmp = 0
# 看对应count,如果count是1,直接将weight_tmp 变成对应weight
if dic_values_count[each] == 1:
result.append([each, weight_list[values_list.index(each)]])
# 不是1,就遍历累加
else:
p = 0
while p <= len(values_list) - 1:
if values_list[p] == each:
weight_tmp += weight_list[p]
p += 1
result.append([each,weight_tmp])
return result

shit!怎么更慢了????
还是改回去吧,并用融合两个列表成一个试一下
class Solution:
def cal(self, target, dic_final):
for couple in target:
if couple[0] in dic_final:
dic_final[couple[0]] += couple[1]
else:
dic_final[couple[0]] = couple[1]
def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
# 题意:找到values相等的将weight相加并返回
dic_final = {}
items_combine = items1 + items2
self.cal(items_combine,dic_final)
result = []
# 价值升序排列
k = list(dic_final.keys())
k.sort()
for each in k:
result.append([each,dic_final[each]])
return result

溜了溜了!