「数组」数组中的4种包含关系(简单)

615 阅读2分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

一、序言

大概在5月份看面经题的时候,看到了一道数组题。当时感觉还蛮懵逼的,现在回过头来整理这道题目,突然很多东西都学通了。

接下来就让我们一起来看吧~

二、了解题目

判断A、B数组的包含关系(值和数量),A属于B返回 1 ,B属于A返回 2 ,两者相等返回 0 ,其他返回 -1

三、题解分析

对于以上题目,其题解思路具体如下:

  • 四种类型的包含关系;
  • 需要一一对应,因此先对两个数组进行排序操作(一般升序操作);
  • 先解决 case4 的情况,之后再解决 case123 的情况。

四、代码实现

依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:

function arrayInclude (arrA, arrB) {
  // 对数组arrA和arrB进行升序排序
    arrA.sort((a, b) => a - b)
    arrB.sort((a, b) => a - b)
    for (let i = 0; i < arrA.length; i++) {
      if (arrB.includes(arrA[i])) {
        // findIndex方法用于找到当前值的索引
        let index = arrB.findIndex(value => arrA[i] === value)
        if (index !== i) return -1 // 解决case 4
        // 以下两句,数组A,B中对应索引的值都删除掉
        arrB.splice(index, 1)
        arrA.splice(i, 1)
        // 上面的索引删除了,所以要继续遍历当前这个
        i--
      }
    }
    // 当B属于A时,返回2
    if (arrA.length > arrB.length) {
      return 2;
    } 
    // 当A属于B时,返回1
    else if (arrA.length < arrB.length) {
      return 1;
    }
    // 当两者相等时,返回0
    else if (arrA.length === arrB.length) {
      return 0;
    }
  }
  
  var a1 = [4,2,3,1,4]
  var a2 = [5,2,3,1,4,4]
  console.log(arrayInclude(a1, a2)) // 1
  var a3 = [4,2,3,1,4]
  var a4 = [2,4,3,1]
  console.log(arrayInclude(a3, a4)) // 2
  var a5 = [4,2,3,1,4]
  var a6 = [4,2,3,1,4]
  console.log(arrayInclude(a5, a6)) // 0
  var a7 = [4,2,3,1,4]
  var a8 = [3,2,3,1,4]
  console.log(arrayInclude(a7, a8)) // -1

以上就是关于包含关系的题解,不知道对小伙伴们是否有帮助呢?

我们下期见👋👋👋