每日两题Day2

今天咱来整哈希表

1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

  • 示例 1:
    输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

  • 示例 2:
    输入:nums = [3,2,4], target = 6 输出:[1,2]

  • 示例 3:
    输入:nums = [3,3], target = 6 输出:[0,1]

暴力解法是啥我也忘了
下面来说一下哈希表的解法
这里就不得不提一句Map(map构造函数的用法)
1.首先创建一个map构造函数,for进行循环
2.在map里寻找是否存在target - nums[i]
3.如果不存在,那么就放进map中,key为值,value为该值的位置
4.如果存在,那么就直接把nums[i]的位置和target-nums[i]的位置作为数组返回就可以了
下面是代码👇

var twoSum = function(nums, target) {
    let hashMap = new Map()
    for(i = 0; i < nums.length; i++){
        let abstract = target - nums[i]
        if(hashMap.has(abstract)) return [i, hashMap.get(abstract)]
        hashMap.set(nums[i], i)
    }
};

49.字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词指字母相同,但排列不同的字符串

  • 示例 1:
    输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
    输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
  • 示例 2:
    输入: strs = [""]
    输出: [[""]]
  • 示例 3:
    输入: strs = [“a”]
    输出: [[“a”]]

这个就不存在暴力解法了,不过我想到一个哈希表的解法
1.创建Map构造函数,进行for循环
2.每次循环中的字符串都可以在内部进行重新排序,按a-z的顺序排
3.在map里寻找是否存在按a-z排序的字符串
4.如果不存在,那么就存入map,key值为该顺序排序的字符串,value为改字符串在输出数组中的index值,从0开始
5.如果存在的话,那么就把未经排序的该字符串放入从map中取的value(也就是index)中
如下👇

var groupAnagrams = function (strs) {
    let arr = []
    let str = ''
    let hashMap = new Map()
    let count = 0

    strs.forEach(item => {
        str = item.split('').sort().join('')
        if (hashMap.has(str)) {
            let outIndex = hashMap.get(str)
            let arr1 = arr[outIndex]

            arr1.push(item)
            arr.splice(outIndex, 1, arr1)
        } else {
            hashMap.set(str, count)
            arr.push([item])
            count++
        }
    })

    return arr
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值