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]
相关推荐
炫饭第一名30 分钟前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫1 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊1 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter1 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折1 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_1 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial1 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu2 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu2 小时前
Angular6学习笔记13:HTTP(3)
前端
小码哥_常2 小时前
Kotlin抽象类与接口:相爱相杀的编程“CP”
前端