diff --git a/javascript/2570-merge-two-2d-arrays-by-summing-values.js b/javascript/2570-merge-two-2d-arrays-by-summing-values.js new file mode 100644 index 000000000..f5200b4d3 --- /dev/null +++ b/javascript/2570-merge-two-2d-arrays-by-summing-values.js @@ -0,0 +1,35 @@ +/** + * Array | Simulation | Sorting + * Time O(n*log(n)) | Space O(n) + * https://leetcode.com/problems/merge-two-2d-arrays-by-summing-values + * @param {number[][]} nums1 + * @param {number[][]} nums2 + * @return {number[][]} + */ +var mergeArrays = function(nums1, nums2) { + + const idToVal2 = {}; + const result = []; + const taken = new Set(); + + for (let i = 0; i < nums2.length; i++) { + const [id, val] = nums2[i]; + idToVal2[id] = val; + } + + for (let i = 0; i < nums1.length; i++) { + const [id, val] = nums1[i]; + result.push([id, (idToVal2[id] || 0) + val]); + taken.add(id); + } + + for (let i = 0; i < nums2.length; i++) { + const [id, val] = nums2[i]; + if (!taken.has(id)) { + result.push([id, val]); + } + taken.add(id); + } + + return result.sort((a,b) => a[0] - b[0]); +};