【前端er每日算法】hash表242有效字母异位词/349/1/202快乐数,你快乐吗?

72 阅读2分钟

题目1 242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram" 输出: true

示例 2:

输入: s = "rat", t = "car" 输出: false

思路

创建一个26长度的数组,初始化为0,遍历第一个存储放到hash中,再遍历第二个字符串--对应位置的计数,然后判断整个hash是否都是0

var isAnagram = function(s, t) {
    let hash = new Array(26).fill(0);
    for (let i = 0; i < s.length; i++) {
        let index = s[i].charCodeAt() - 'a'.charCodeAt();
        hash[index]++;
    }
    for (let j = 0; j < t.length; j++) {
        let index = t[j].charCodeAt() - 'a'.charCodeAt();
        if (!hash[index]) {
            return false;
        }
        hash[index]--
    }
    for (let i = 0; i < hash.length; i++) {
        if (hash[i]) {
            return false
        }
    }
    return true
};

题目2 349. 两个数组的交集

思路

比较简单,先保存一个字符hash,再遍历第二个,只是最后的结果只需要放一遍,所以用了set去重。

var intersection = function(nums1, nums2) {
    let hash = {};
    let res = new Set();
    for (let i = 0; i < nums1.length;i++){
        hash[nums1[i]] = hash[nums1[i]] ? hash[nums1[i]]++ : 1
    };
    for (let i = 0;i < nums2.length;i++) {
        if(hash[nums2[i]]) {
            res.add(nums2[i])
        }
    }
    return Array.from(res.values())
}

题目3 202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

function getSum(n) {
  let sum = 0;
  while (n) {
    let cur = n % 10;
    sum += cur * cur;
    n = Math.floor(n / 10);
  }
  return sum;
}

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function (n) {
  let hash = {};
  let val = n;
  while (1) {
    val = getSum(val);
    if (hash[val]) {
      return false;
    }
    hash[val] = 1;
    if (val == 1) {
      return true;
    }
  }
};

题目4 1. 两数之和

思路

比较简单,直接写。

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

后记

这两天加班太累,基本赶不上进度,希望后面能一直持续跟上刷题。