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]
方法二:自己没有想到更好的方法,看了网上的思路大概就是利用哈希表来减少查找的时间
有几个知识点不清晰:
- 哈希表:将时间复杂度讲到O(n)
- 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 -- 如果指定键的值不存在时,返回该默认值