前端力扣刷题_数据结构篇(哈希表)

哈希表可用来 1,哈希映射 2,哈希去重
数组中重复的数字
一种是两层for循环,一种是先排序(sort())再遍历,都不如第三种设置哈希表用空间换时间快。

var findRepeatNumber = function(nums) {
    const map=new Map();
    for(let num of nums){
        if(map.has(num)) return num;
        else{map.set(num,true);}
    }
    return -1;
};

两数之和

var twoSum = function(nums, target) {
    const m=new Map();
    //m.has(key)返回布尔值 判断是否含有key
    //m.get(key)返回value
    //m.set(key,value)
    //这里把值作为key,把索引作为value,更能避免重复
    for(let i=0;i<nums.length;i++){
        if(m.has(target-nums[i])) return [i,m.get(target-nums[i])];
        else{m.set(nums[i],i)}
    }
};

两个数组的交集

var intersection = function(nums1, nums2) {
    return [...new Set(nums1)].filter(item=>nums2.includes(item));
};

扑克牌中的顺子
解题关键:

  • 除了0不能有其他重复的牌
  • 除0以外五张牌中最大的牌和最小的牌相差不能大于5
var isStraight = function(nums) {
    const s=new Set();
    for(let num of nums){
        if(num===0) continue;
        if(s.has(num)) return false;
        s.add(num);
    }
    let max=Math.max(...s);
    let min=Math.min(...s);
    return max-min<5;
};

LRU缓存
创建map来保存数据
get:访问某key,访问完要将其放在最后的。若key存在,先保存value值,删除key,再添加key,最后返回保存的value值。若key不存在,返回-1
put:新加一个key,要将其放在最后的。所以,若key已经存在,先删除,再添加。如果容量超出范围了,将map中的头部删除。
如何删除map中的头部key:
map.keys()返回一个迭代器
这个迭代器调用next()方法,返回包含迭代器返回的下一个值,存在value属性中

class LRUCache {
    constructor(capacity) {
        this.capacity = capacity;
        this.map = new Map();
    }
    get(key) {
        if (this.map.has(key)) {
            // get表示访问该值
            // 所以在访问的同时,要将其调整位置,放置在最后
            const temp = this.map.get(key);
            // 先删除,再添加
            this.map.delete(key);
            this.map.set(key, temp);
            // 返回访问的值
            return temp;
        } else {
            // 不存在,返回-1
            return -1;
        }
    }
    put(key, value) {
        // 要将其放在最后,所以若存在key,先删除
        if (this.map.has(key)) this.map.delete(key);
        // 设置key、value
        this.map.set(key, value);
        if (this.map.size > this.capacity) {
            // 若超出范围,将map中头部的删除
            // map.keys()返回一个迭代器
            // 迭代器调用next()方法,返回包含迭代器返回的下一个值,在value中
            this.map.delete(this.map.keys().next().value);
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值