【7.15】算法复习五 哈希

7.15

  • 50 两数之和(下标+1)
function twoSum( numbers ,  target ) {
    // write code here
    let map = new Map()
    for(let i=0;i<numbers.length;i++){
        if(map.has(target-numbers[i])){
            return [i+1,map.get(target-numbers[i])+1].sort((a,b)=> a-b)
        }
        map.set(numbers[i],i)
    }
}
  • 51 数组中出现次数超过一半的数字
function MoreThanHalfNum_Solution(numbers)
{
    // write code here
    let map = new Map()
    for(let i=0;i<numbers.length;i++){
        if(map.get(numbers[i])==undefined){
            map.set(numbers[i],1)
        }else{
            map.set(numbers[i],map.get(numbers[i])+1)
        }
        if(map.get(numbers[i]) > numbers.length/2){
            return numbers[i]
        }
    }
}
  • 52 数组中只出现一次的两个数字
function FindNumsAppearOnce( array ) {
    // write code here
    let map = new Map()
    let filter = []
    for(let i in array){
        if(map.get(array[i]) == undefined){
            map.set(array[i],1)
        }else{
            map.set(array[i],map.get(array[i])+1)
        }
        if(map.get(array[i]) == 2){
            filter.push(array[i])
        }
    }
    let res = array.filter(a=>!filter.includes(a))
    res.sort((a,b)=>a-b)
    return res
}
  • 53 缺失的第一个正整数
function minNumberDisappeared( nums ) {
    // write code here
    let map = new Map()
    for(let i in nums){
        map.set(nums[i],true)
    }
    let j
    for(j=1;j<=nums.length;j++){
        if(!map.has(j)) return j
    }
    return j
}
  • 54 三数之和(给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0 找出数组S中所有满足条件的三元组)
function threeSum( num ) {
    // write code here
    let res = []
    let set = new Set()
    for(let i=0;i<num.length-2;i++){
        let map = new Map()
        for(let j=i+1;j<num.length;j++){
            if(map.has(num[j])){
                let cur = map.get(num[j]).concat(num[j]).sort((a,b)=>a-b)
                if(!set.has(JSON.stringify(cur))){
                    set.add(JSON.stringify(cur))
                    res.push(cur)
                }
            }else{
                map.set(0-num[i]-num[j],[num[i],num[j]])
            }
        }
    }
    return res
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值