算法|242.有效的字母异位词349. 两个数组的交集202. 快乐数1.两数之和

242.有效的字母异位词

思考: 一种是hash表, 一种是通过排序转成字符串

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    return s.split('').sort().join('')===t.split('').sort().join('')
};

349. 两个数组的交集

思路: 考虑hash表key的唯一性, 一种是用对象实现, 一种用set 来实现

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function (nums1, nums2) {
    const map1 = {}
    const map2 = {}
    for (let ch of nums1) {
        map1[ch] = 1
    }
    for (let ch of nums2) {
        map2[ch] = 1
    }
    const key1 = Object.keys(map1)
    const key2 = Object.keys(map2)
    return key2.filter(item => key1.includes(item))
};
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function (nums1, nums2) {
   const result = []
   for(let ch of nums1){
       if(nums2.includes(ch)){
           result.push(ch)
       }
   }
   return [...new Set(result)]
};

202. 快乐数

没想到这题还是简单题,然而不简单, 看题解的, 还没明白道理

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function (n) {
    let set = new Set();
    function getNum(n) {
        let sum = 0;
        // 这个公式是干嘛的呢
        while (n) {
            sum += (n % 10) ** 2;
            n = Math.floor(n / 10);
        }
        return sum;
    }
    while (n !== 1 && !set.has(n)) {
        set.add(n);
        n = getNum(n);
    }
    return n === 1;
};

1.两数之和

思路: hash 键存value, 值存下标

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

你可能感兴趣的:(算法)