20250311

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

js 复制代码
function checkArrayRelation(A, B) {
    const treqA = getTreqNum(A)
    const treqB = getTreqNum(B)
    const subA = getSubSet(treqA,treqB)
    const subB = getSubSet(treqB,treqA)
    if(subA && subB){
        return 0
    }else if(subA) {
        return 1
    }else if(subB) {
        return 2
    }else {
        return -1
    }
    
}
// 统计该值出现的频次
function getTreqNum(arr){
    const treqObj = {}
    for(const num of arr) {
        treqObj[num] = (treqObj[num] || 0) + 1
    }
    return treqObj
}
// 判断是否为子集
function getSubSet(smallArr, bigArr){
    for(const num in smallArr){
        if(smallArr[num] > bigArr[num] || !(num in bigArr)){
            return false
        }
    }
    return true
}
console.log(checkArrayRelation([1, 2, 2], [1, 2, 2, 3]));    // 1(A 属于 B)
console.log(checkArrayRelation([1, 2, 2, 3], [1, 2, 2]));    // 2(B 属于 A)
console.log(checkArrayRelation([1, 2], [1, 2]));             // 0(相等)
console.log(checkArrayRelation([1, 2], [2, 3]));             // -1(无关系)
console.log(checkArrayRelation([1, 1], [1, 2]));             // -1(A 不属 B,B 不属 A)
console.log(checkArrayRelation([1, 2], [1, 1, 2]));          // 1(A 属于 B) 

实现函数solution(arr, k)

arr是number数组,k是number,返回前k个最小的数字组成的数组,**保持相对顺序** 输入:[1,2,3,4,5,3,2],3,输出:[1,2,2] 输入:[1,2,3,4,5,3,2],4,输出:[1,2,3,2] 输入:[1,2,3,4,5,3,2],5,输出:[1,2,3,3,2]

js 复制代码
function solution(arr, k){
    if(k === 0 || arr.length == 0) return []
    const indexArr = 
        arr.map((value, index)=> ({value,index}))
           .sort((a, b)=> a.value - b.value || a.index - b.index)
    return indexArr.slice(0, k)
        .sort((a, b)=> a.index - b.index)
        .map(item=> item.value)
}
console.log(solution([1, 2, 4, 3, 2], 4));  // [1, 2, 3, 2]
console.log(solution([1, 2, 4, 3, 2], 2));  // [1, 2]
console.log(solution([1, 2, 3, 4, 5, 3, 2], 3)); // [1, 2, 2]
console.log(solution([1, 2, 3, 4, 5, 3, 2], 5)); // [1, 2, 3, 3, 2]
相关推荐
YYsuni1 分钟前
项目植入 Git 变量
前端·javascript·前端框架
mannymu2 分钟前
前端AI入门之路(一)
前端
日升_rs4 分钟前
Chrome 134 版本新特性
前端·chrome·浏览器
前端卧龙人5 分钟前
前端如何最小化重绘和回流
前端
南蓝6 分钟前
【React】React 19 新特性
前端
银之夏雪7 分钟前
深入理解 GPU 渲染加速与合成层(Composite Layers)
前端·javascript·浏览器
机巧咸鱼不会受伤8 分钟前
为什么浏览器的渲染进程不适用于多个线程来处理
前端·浏览器
前端日常开发8 分钟前
轻松合并远端两个Commit,代码历史秒变整洁!
前端
Au_ust8 分钟前
React:类组件(上)
前端·javascript·react.js
前端日常开发9 分钟前
前端并发请求太多?教你几招轻松搞定!
前端