实现一个支持动态扩容的数组
实现一个大小固定的有序数组,支持动态增删改操作
实现两个有序数组合并为一个有序数组
学习哈希表思想,并完成leetcode上的两数之和(1)及Happy Number(202)!(要求全部用哈希思想实现!)
哈希表定义
冲突
对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为冲突(英语:Collision)
class DynamicArray:
def __init__(self, capacity=10):
self._capacity = capacity
self._array = [None] * self._capacity
self._size = 0
def __len__(self):
return self._size
def __str__(self):
'''转化为字符串'''
return str(self._array)
def __getitem__(self,index):
return self._array[index]
def __append__(self, item):
'''增加元素'''
if self._size == self._capacity:
self._capacity = 2*self._capacity
self._array[self._size] = item
self._size += 1
def __print__(self):
for i in range(self._size):
print(self._array[i], end=' ')
if __name__ == '__main__':
array = DynamicArray()
print('数组的长度为:{}'.format(array.__len__()))
print(type(array.__str__()))
print(type(array._array))
array.__append__(10)
array.__print__()
####2.1.1概念
Python 字典(Dictionary) ——setdefault()方法
Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
dict.setdefault(key, default=None)
class Trie:
def __init__(self):
self.root = {}
self.end = -1
def insert(self, word):
'''从根节点遍历单词,char by char,、
如果不存在则新增最后加上一个单词结束标志'''
curNode = self.root
for c in word:
if not c in curNode:
curNode[c] = {}
curNode = curNode[c]
curNode[self.end] = True
def search(self, word):
'''查找word是否在树中'''
curNode = self.root
for c in word:
if not c in curNode:
return False
curNode = curNode[c]
#找到结尾
if not self.end in curNode:
return False
return True
def startsWith(self, prefix):
'''前字符'''
curNode = self.root
for c in prefix:
if not c in curNode:
return False
curNode = curNode[c]
return True
if __name__ == '__main__':
trie = Trie()
trie.insert("something")
trie.insert("somebody")
trie.insert("somebody3")
print(trie.search("key"))
print(trie.search("somebody3"))
print(trie.startsWith('some'))
朴素的字符串匹配算法
字符串匹配:
输入:原字符串和子串
输出:子串在原字符串中首次出现的位置
朴素算法(暴力搜索法)——只搜索部分
def naive_match(source, target):
'''
if target in source:
return True
else:
return False
'''
m,n = len(source),len(target)
for i in range(m-n+1): # range 不包括尾部
if source[i:i+n] == target:
return i
return False
print(naive_match('abaddfeaefe','add'))
Three Sum(求三数之和)
英文版:https://leetcode.com/problems/3sum/
中文版:https://leetcode-cn.com/problems/3sum/
Majority Element(求众数)
英文版:https://leetcode.com/problems/majority-element/
中文版:https://leetcode-cn.com/problems/majority-element/
Missing Positive(求缺失的第一个正数)
英文版:https://leetcode.com/problems/first-missing-positive/
中文版:https://leetcode-cn.com/problems/first-missing-positive/
Reverse String (反转字符串)
英文版:https://leetcode.com/problems/reverse-string/
中文版:https://leetcode-cn.com/problems/reverse-string/
Reverse Words in a String(翻转字符串里的单词)
英文版:https://leetcode.com/problems/reverse-words-in-a-string/
中文版:https://leetcode-cn.com/problems/reverse-words-in-a-string/
String to Integer (atoi)(字符串转换整数 (atoi))
英文版:https://leetcode.com/problems/string-to-integer-atoi/
中文版:https://leetcode-cn.com/problems/string-to-integer-atoi/