代码随想录刷题Day05

01.有效的字母异位词

leetcode

思路:创建一个长度为26的数组,数组中的每个元素代表着字母出现的次数。循环遍历两个字符串,前面的字符串出现的字母在数组中加一,第二个数组出现的字母在数组中减一。遍历完成后,数组中的每个元素都为0,代表着这两个字符串互为异位词。

function isAnagram(s: string, t: string): boolean {
    if (s.length !== t.length) return false
    let hash:number[] = Array(26).fill(0);
    const subtracted = 'a'.charCodeAt(0)
    for (let i = 0; i < s.length; i++) {
        hash[s[i].charCodeAt(0) - subtracted]++
        hash[t[i].charCodeAt(0) - subtracted]--
    }
    console.log(hash)
    return hash.every(item => item == 0)
};

02.两个数组的交集

leetcode

思路:利用Set去重的特性,将nums1数组去重,然后遍历nums2,判断nums1Set里是否有nums2中的元素,。如果有的话,加入到resSet中

function intersection(nums1: number[], nums2: number[]): number[] {
    const nums1Set:Set<number> = new Set(nums1);
    let resSet:Set<number> = new Set()
    for (let i = 0; i < nums2.length; i++) {
        if (nums1Set.has(nums2[i])) resSet.add(nums2[i])
    }
    return Array.from(resSet)
};

03.快乐数

leetcode

思路:创造一个切割字符串并且累加的函数calcSum,用于将该数替换为它每个位置上的数字的平方和。使用set存储每次得出的平方和,直到n重复出现,然后判断n是否等于1。

function isHappy(n: number): boolean {
    const calSum = (n:number) => {
        return String(n).split('').reduce((prev, cur) => prev + Number(cur) ** 2, 0)
    }
    let hash:Set<number> = new Set()
    while (n != 1 && !hash.has(n)) {
        hash.add(n)
        n = calSum(n)
    }
    return n == 1
};

04.两数之和

leetcode

思路:使用Map存储键值对(元素,元素下标),map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)

function twoSum(nums: number[], target: number): number[] {
    const numMap:Map<number, number> = new Map()
    let index:number | undefined;
    let res:number[] = []
    for (let i = 0; i < nums.length; i++) {
        index = numMap.get(target - nums[i])
        if (index !== undefined) {
            res = [i, index]
        }
        numMap.set(nums[i], i)
    }
    return res
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值