训练营Day6

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 [];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值