242.有效的字母异位词
题目链接: 242.有效的字母异位词
参考文档:代码随想录
状态:已完成,耗时一小时
思路:建一个集合,以空间换时间,将字符串s遍历并存入集合中,以字母为key,字母数量为value。完成后再对字符串t遍历一遍,如果有相同的字母,则对集合中的value–,如果value为负数或为NaN(t存在s中不存在的字母),则返回false。如果s和t不等长或者s、t为空,也返回false。代码如下:
var isAnagram = function(s, t) {
if(s.length == 0 || t.length == 0 || t.length!=s.length){
return false;
}
let temp = new Map();
for(const char of s){
if(temp[char]>0){
temp[char]++;
}
else temp[char]=1;
}
for(const char of t){
if(temp[char]>0){
temp[char]--;
}
else return false;
}
return true;
};
349. 两个数组的交集
题目链接: 349. 两个数组的交集
参考文档:代码随想录
状态:已完成,耗时一小时
思路:和前一道题大同小异,不过本次使用了Map()的api来完成,更符合日常习惯些
var intersection = function(nums1, nums2) {
let temp = new Map();
let ret = [];
if(nums1 === [] || nums2 === []) return [];
for(const num of nums1){
temp.set(num, 1);
}
for(const num of nums2){
if(temp.get(num)==1){
temp.set(num, 0);
ret.push(num);
}
}
return ret;
};
202. 快乐数
题目链接: 202. 快乐数
参考文档:代码随想录
状态:已完成,耗时半小时
思路:按着给出的快乐数计算步骤即可得出大概思路,唯一的问题在于如何证明该数字不是快乐数。进而得出,当后续计算出现重复的平方和时,便会陷入无限循环,便能证明该数字不是快乐数。代码如下:
var isHappy = function(n) {
let sum = n;
let record = new Map();
while(sum !== 1){
n = sum.toString().split('');
sum = 0;
for(const num of n){
sum+=Math.pow(num,2);
}
if(record.get(sum)===1) return false
record.set(sum, 1);
}
return true;
};
1. 两数之和
题目链接: 1. 两数之和
参考文档:代码随想录
思路一:暴力解法
var twoSum = function(nums, target) {
if(nums.length<2) return null;
for(let i = 0;i<nums.length-1; i++){
for(let j = i+1;j<nums.length; j++){
if(nums[i]+nums[j]===target)
return [i,j]
}
}
return null;
};
思路二:leetcode参考 笨猪爆破组 同学的代码,用map()进行处理了,并且巧妙处理了两个目标相等的情况。
function twoSum(nums, target) {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const curNum = nums[i];
const targetNum = target - curNum;
const targetNumIndex = map.get(targetNum);
if (targetNumIndex !== undefined) {
return [targetNumIndex, i];
} else {
map.set(curNum, i);
}
}
}
总结:学习算法的时候更需要关注每种数据接口带有的api,以及牢记一些字符、数组的常用函数