力扣算法JS LC [349. 两个数组的交集] LC [202. 快乐数]

126 阅读1分钟

LC 349. 两个数组的交集

给定两个数组 nums1nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

解题思路:将一个数组放进 set 集合中,然后拿另外一个数组来进行比对,看是否有一样的,有就放进输出结果的集合中

代码:

var intersection = function(nums1, nums2) {
    // 判断nums1长度与nums2长度 保证 前者长度要大于后者
    if(nums1.length < nums2.length) {
        const arr = nums1;
        nums1 = nums2;
        nums2 = arr;
    }
    const setNums1 = new Set(nums1); //将nums1的值放进set集合中
    const result = new Set();
    for(let i = 0; i < nums2.length; i++) { //遍历nums2 ,查看是否在这个集合里面,有就放进输出结果的集合中。
        if(setNums1.has(nums2[i])) {
            result.add(nums2[i])
        }
    }
    return Array.from(result)
};

LC 202. 快乐数

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

「快乐数」 定义为:

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

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

解题思路:创建一个 set 集合,然后利用reduce 进行求值 放进 set 中进行判断

代码:

var isHappy = function (n) {
  const set = new Set();
  while (n !== 1) {
    if (set.has(n)) return false  //有出现重复的 就直接return false
    set.add(n)
    n = (n + '').split('').reduce((l, i) => l + i * i, 0) //将 n 分解出来,然后利用reduce进行求和
  }
  return true
};

\