前端算法系列-哈希表01

47 阅读1分钟

242.有效的字母异位词

var getStrHashArr = function(s){
    let sArr = []
    for(let i=0;i<s.length;i++){
        let num = s[i].charCodeAt() - 61
        if(sArr[num]){
            sArr[num]++
        }else{
            sArr[num] = 1
        }
    }
    return sArr
}
var isAnagram = function(s, t) {
    let sArr = getStrHashArr(s)
    let tArr = getStrHashArr(t)
    let flag = true
    for(let i=0;i<Math.max(sArr.length,tArr.length);i++){
        if(sArr[i] !== tArr[i]){
            flag = false
            break;
        }
    }
    return flag
    
};

看完解析之后发现自己的解法空间复杂度过高,可以只声明一个数组用于hash存储,遍历两个字符串的时候分别在对应的下标进行加和减的操作,最后判断数组中所有的元素是否都为0

349. 两个数组的交集

var intersection = function(nums1, nums2) {
    let arr = []
    let result = new Set([])
    for(let i=0;i<nums1.length;i++){
        let num = nums1[i]
        arr[num] = 1
    }
    for(let j=0;j<nums2.length;j++){
        let num = nums2[j]
        if(arr[num] === 1){
            result.add(num)
        }
    }
    return [...result]
};

202. 快乐数

var getSum = function (n) {
    let sum = 0;
    while (n) {
        sum += (n % 10) ** 2;
        n =  Math.floor(n/10);
    }
    return sum;
}
var isHappy = function(n) {
    let set = new Set();   // Set() 里的数是惟一的
    // 如果在循环中某个值重复出现,说明此时陷入死循环,也就说明这个值不是快乐数
    while (n !== 1 && !set.has(n)) {
        set.add(n);
        n = getSum(n);
    }
    return n === 1;
};

1. 两数之和


var twoSum = function(nums, target) {
    let hash = []
    for(let i=0;i<nums.length;i++){
        if(hash[target-nums[i]]!==undefined){
            return [hash[target - nums[i]],i]
        }
        hash[nums[i]] = i
    }
};