菜鸡刷算法的一天,每天分享两题算法,大家有这个想法的,可以给我个关注,然后一起坚持每天的算法之旅。希望我们共同进步,一起加油。 LC 349. 两个数组的交集 给定两个数组 n
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 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
编写一个算法来判断一个数 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
};