给你两个二维整数数组 items1 和 items2 ,表示两个物品集合。每个数组 items 有以下特质: items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ,weighti 表示第 i 件物品的 重量 。 items 中每件物品的价值都是 唯一的 。 请你返回一个二维数组 ret,其中 ret[i] = [valuei, weighti], weighti 是所有价值为 valuei 物品的 重量之和 。 注意:ret 应该按价值 升序 排序后返回。
来源:力扣(LeetCode) 链接:leetcode.cn/problems/me… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 相同的加在一起,所以没有重复的,所以可以用一个map当容器
/**
* @param {number[][]} items1
* @param {number[][]} items2
* @return {number[][]}
*/
var mergeSimilarItems = function (items1, items2) {
if (!items1 && !items2) return []
if (!items1.length && !items2.length) return []
const comparer = (a, b) => {
if (a[0] == b[0]) {
return a[1] - b[1]
} else {
return a[0] - b[0]
}
}
items1.sort(comparer)
items2.sort(comparer)
let map = new Map()
let i = 0, j = 0;
while (i < items1.length || j < items2.length) {
let name1 =items1[i] && items1[i][0],
name2 =items2[j] && items2[j][0],
n1 = items1[i] &&items1[i][1],
n2 = items2[j] &&items2[j][1];
if (name1 == name2) {
map.set(name1, (map.get(name1) || 0) + n1 + n2)
i++
j++
} else {
if (name1) {
map.set(name1, (map.get(name1) || 0) + n1)
i++
}
if (name2) {
map.set(name2, (map.get(name2) || 0) + n2)
j++
}
}
}
let ans = [...map.entries()]
ans.sort(comparer)
return ans
};