Leecode day01_两数之和

1.两数之和
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

方法一:暴力求解,直接两次循环遍历 寻找结果

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(len(nums)):
                if((i != j) and (nums[i] + nums[j] == target)):
                    return [i, j]

方法二:自己没有想到更好的方法,看了网上的思路大概就是利用哈希表来减少查找的时间
有几个知识点不清晰:

  1. 哈希表:将时间复杂度讲到O(n)
  2. enemerate:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
#在for循环中使用enumerate
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
... 
0 one
1 two
2 three

题目 变位词组
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
注意:本题相对原题稍作修改

示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

说明:
所有输入均为小写字母。
不考虑答案输出的顺序。

解题思路:想遍历每一个字符串,并且记录每一个字符串的hashmap的Counter,然后用双重循环去比较Counter,但是我自己不知道该如何将不同的Counter分出来,遂放弃

参考答案:

    def groupAnagrams(self, strs):
        classes = dict()
        for s in strs:
            sort_s = ''.join(sorted(s))
            classes[sort_s] = classes.get(sort_s, []) + [s]
        return [vals for vals in classes.values()]

知识点:

  • join用法
语法:  'sep'.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
  • dict.get(key, default=None)
key -- 字典中要查找的键。
default -- 如果指定键的值不存在时,返回该默认值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值