代码随想录Day5-Leetcode242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

发布时间 2023-03-23 12:08:41作者: herbert_118

242.有效的字母异位词

准备面试隔了三天没刷题, 结果面试里就考到哈希表了,也是蛮感叹的.
简单题, 不过api又忘的差不多了
这道可以用数组手动实现一个简易哈希表, 但(因为面试里这么干我最后写不出来了)为了适配unicode还是用map更妥当

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length!=t.length){
        return false
    }
    let map = new Map()
    let num
    for(let i = 0; i<s.length;i++){
        if(map.has(s[i])){
            num = map.get(s[i])
            map.set(s[i],num+1)
        }else{
            map.set(s[i],1)
        }
        if(map.has(t[i])){
            num = map.get(t[i])
            map.set(t[i],num-1)
        }else{
            map.set(t[i],-1)
        }
    }
    if(Array.from(map.values()).every(e=>e===0)){
        return true
    }else{
        return false
    }
};

349. 两个数组的交集

题目链接:https://leetcode.cn/problems/intersection-of-two-arrays/
确实使用set会很快, 依稀记得学数据结构时要求用线性表自己实现简单的set(纯遍历)也这样做过

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    let set = new Set()
    let result = new Set()
    for(let i = 0; i< nums1.length;i++){
        set.add(nums1[i])
    }
    for(let i = 0; i<nums2.length;i++){
        if(set.has(nums2[i])){
            result.add(nums2[i])
        }
    }
    return Array.from(result.values())
};

202. 快乐数

开始没有思路, 看了提示后想了想, 如果无限循环,不就可用set来判断么;

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
    let arr
    let set = new Set()
    let num = n

    do{
        arr = []
        while(num>0){
            arr.push(num%10)
            num = Math.floor(num/10)
        }
        num = 0
        arr.forEach(e=>num+=e*e)
        if(num==1){
            return true
        }else if(set.has(num)){
            console.log(num)
            return false
        }else{
            set.add(num)
        }
    }
    while(true);
};

1. 两数之和

经典回顾,不可不品

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map()
    for(let i = 0; i<nums.length;i++){
        if(map.has(nums[i])){
            return [map.get(nums[i]), i]
        }else{
            map.set(target - nums[i],i)
        }
    }
};