242.有效的字母异位词
// 242. 有效的字母异位词
// (训练营)
var isAnagram=function(s,t){
if(s.length!=t.length) return false;
const reSet=new Array(26).fill(0);
const base='a'.charCodeAt();
for(const i of s){
reSet[i.charCodeAt()-base]++;
}
for(const i of t){
if(!reSet[i.charCodeAt()-base]) return false;
reSet[i.charCodeAt()-base]--;
}
return true;
}
//其他方法
var isAnagram = function(s, t) {
if(s.length != t.length) return false;
let map = new Map();
for(let i = 0; i < s.length; i++){
if(map.has(s[i])){
map.set(s[i], map.get(s[i]) + 1);
}else{
map.set(s[i], 1);
}
}
for(let i = 0; i < t.length; i++){
if(map.has(t[i])){
map.set(t[i], map.get(t[i]) - 1);
}else{
return false;
}
}
for(let value of map.values()){
if(value != 0) return false;
}
return true;
}
349. 两个数组的交集
var intersection = function(nums1, nums2) {
let set1 = new Set(nums1);
let set2 = new Set(nums2);
let result = [];
for (let item of set1) {
if (set2.has(item)) {
result.push(item);
}
}
return result;
};
//训练营答案
var intersection=function(nums1,nums2){
if(nums1.length<nums2.length){
const temp=nums1;
nums1=nums2;
nums2=temp;
}
const nums1Set =new Set(nums1);
const reSet=new Set();
// for(const n of nums2){
// nums1Set.has(n)&&reSet.add(n);
// }
// 可以用forEach
// nums2.forEach(n=>{
// nums1Set.has(n)&&reSet.add(n);
// })
for(let i=0;i<nums2.length;i++){
nums1Set.has(nums2[i])&&reSet.add(nums2[i]);
}
return [...reSet];
}
第202题. 快乐数
// var isHappy = function(n) {
// let set = new Set();
// while (n != 1 && !set.has(n)) {
// set.add(n);
// n = getSum(n);
// }
// return n == 1;
// }
// var getSum = function(n) {
// let sum = 0;
// while (n > 0) {
// let digit = n % 10;
// sum += digit * digit;
// n = Math.floor(n / 10);
// }
// return sum;
// }
// 训练营的方法1
var isHappy = function(n) {
let m=new Map();
const getnum=(num) =>{
let sum=0;
while(n){
sum+=(n%10)**2;
n=Math.floor(n/10);
}
return sum;
}
while(true){
if(m.has(n)) return false;
if(n===1) return true;
m.set(n,1)
n=getnum(n);
}
};
// 训练营的方法2:使用环形链表的思想 说明出现闭环 退出循环
var isHappy = function(n) {
var getN=(n)=>{
let sum=0;
while(n){
sum+=(n%10)**2;
n=Math.floor(n/10);
}
return sum;
}
if(getN(n)==1) return true;
let a =getN(n),b=getN(getN(n));
//如果a===b 说明出现闭环 退出循环
while(b!==1 && getN(b)!==1 && a!==b){
a=getN(a);
b=getN(getN(b));
}
return b===1||getN(b)===1;
};
// 训练营的方法3:使用Set()更简洁
var getSum = function(n) {
let sum=0;
while(n){
sum+=(n%10)**2;
n=Math.floor(n/10);
}
return sum;
}
var isHappy = function(n) {
let set=new Set();
while(n!==1 && !set.has(n)){
set.add(n);
n=getSum(n);
}
return n===1;
};
// 训练营的方法4:使用Set(),求和用reduce
var isHappy = function(n) {
let set=new Set();
let totalCount;
while(totalCount !==1){
let arr=(''+(totalCount||n)).split('');
totalCount=arr.reduce((total,num)=>{
return total+num**2;
},0);
if(set.has(totalCount)) return false;
set.add(totalCount);
}
return true;
};
1. 两数之和
var twoSum = function(nums, target) {
let map = new Map();
for(let i = 0; i < nums.length; i++){
if(map.has(target - nums[i])){
return [map.get(target - nums[i]), i];
}
map.set(nums[i], i);
}
return [];
};
//训练营的方法
var twoSum=function(nums,target){
let hash={};
for(let i=0;i<nums.length;i++){// 遍历当前元素,并在map中寻找是否有匹配的key
if(hash[target-nums[i]]!==undefined){
return [hash[target-nums[i]],i];
}
hash[nums[i]]=i;// 如果没找到匹配对,就把访问过的元素和下标加入到map中
}
return [];
}