判断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]