这是我参与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
以上就是关于包含关系的题解,不知道对小伙伴们是否有帮助呢?
我们下期见👋👋👋