美文网首页
LeetCode题解:2363. 合并相似的物品,双指针,详细注

LeetCode题解:2363. 合并相似的物品,双指针,详细注

作者: Lee_Chen | 来源:发表于2023-02-27 15:42 被阅读0次

    原题链接:
    https://leetcode.cn/problems/merge-similar-items/

    解题思路:

    1. 先将两个数组排序
    2. 再用两个指针ij分别遍历两个数组的元素
      • 如果items1[i][0] === items2[j][0],就将两个同价值的物品重量相加
      • 如果items1[i][0] < items2[j][0],就存储items1[i]
      • 如果items1[i][0] > items2[j][0],就存储items2[j]
      • 还需要考虑指针移出数组的场景
    /**
     * @param {number[][]} items1
     * @param {number[][]} items2
     * @return {number[][]}
     */
    var mergeSimilarItems = function (items1, items2) {
      let result = []
      // 先对两个数组进行排序
      items1.sort((a, b) => a[0] - b[0])
      items2.sort((a, b) => a[0] - b[0])
    
      // 用两个指针分别合并数组
      for (let i = 0, j = 0; i < items1.length || j < items2.length; ) {
        // 价值相同时,需要将两个重量相加
        if (items1[i]?.[0] === items2[j]?.[0]) {
          result.push([items1[i][0], items1[i++][1] + items2[j++][1]])
        }
        // 如果指针j已经移出items2,或者items1[i]的价值比items2[j]小,此时直接存储items1[i]
        else if (!items2[j] || items1[i]?.[0] < items2[j]?.[0]) {
          result.push(items1[i++])
        }
        // 如果指针已经移出items1,或者items1[i]的价值比items2[j]大,此时直接存储items2[j]
        else if (!items1[i] || items1[i]?.[0] > items2[j]?.[0]) {
          result.push(items2[j++])
        }
      }
    
      return result
    }
    

    复杂度分析:

    • 时间复杂度:O(n+m)log⁡(n+m)

    相关文章

      网友评论

          本文标题:LeetCode题解:2363. 合并相似的物品,双指针,详细注

          本文链接:https://www.haomeiwen.com/subject/wenhldtx.html