力扣JS版[349. 交集算法]与[202. 快乐数问题]如何高效解决?

2026-05-22 12:581阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计786个文字,预计阅读时间需要4分钟。

力扣JS版[349. 交集算法]与[202. 快乐数问题]如何高效解决?

菜鸡刷算法的一天,每天分享两道算法题,大家有这个想法的,可以关注我,一起坚持每天算法之旅。希望我们共同进步,一起加油!

+LC+349. 两个数组的交集 + 给定两个数组,返回它们的交集。

菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。 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 。

力扣JS版[349. 交集算法]与[202. 快乐数问题]如何高效解决?

示例 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
};

本文共计786个文字,预计阅读时间需要4分钟。

力扣JS版[349. 交集算法]与[202. 快乐数问题]如何高效解决?

菜鸡刷算法的一天,每天分享两道算法题,大家有这个想法的,可以关注我,一起坚持每天算法之旅。希望我们共同进步,一起加油!

+LC+349. 两个数组的交集 + 给定两个数组,返回它们的交集。

菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。 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 。

力扣JS版[349. 交集算法]与[202. 快乐数问题]如何高效解决?

示例 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
};