LeetCode 2363. 合并相似的物品-可心科创工作室

LeetCode 2363. 合并相似的物品-可心科创工作室缩略图

给你两个二维整数数组 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

LeetCode 2363. 合并相似的物品-可心科创工作室插图
OpenCV步步精深-可心科创工作室
LeetCode 2363. 合并相似的物品-可心科创工作室插图1
OpenCV步步精深-可心科创工作室

思路:找到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
LeetCode 2363. 合并相似的物品-可心科创工作室插图2
OpenCV步步精深-可心科创工作室

感觉有点慢啊,看看怎么优化。

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
LeetCode 2363. 合并相似的物品-可心科创工作室插图3
OpenCV步步精深-可心科创工作室

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
LeetCode 2363. 合并相似的物品-可心科创工作室插图4
OpenCV步步精深-可心科创工作室

溜了溜了!

更多干货见 OpenCV步步精深