每天坚持做题不容易,虽然很多题目都是参考别人的思维,但是我想做过总会有印象的,像dfs这种东西刚开始不熟,后面写多了就知道个大概模式了,自己加油吧!!!
1. Top K Frequent Elements [55ms]
# 方法1:自己写的哈希表,因为不知道get函数,所以sort出来的是元组,还需要后面的计算,超时
# 方法2:参考dicuss用get方法,大数据量不超时
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
hashTable = {}
for i in nums:
if i not in hashTable.keys():
hashTable[i] = 1
else:
hashTable[i] += 1
sortK = sorted(hashTable.items(), key=lambda d: d[1], reverse=True)
print(sortK)
ans = []
for i in range(len(sortK[:k])):
ans.append(sortK[i][0])
return ans
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
hashTable = {}
for num in nums:
if num in hashTable:
hashTable[num] += 1
else:
hashTable[num] = 0
ans = sorted(hashTable, key=hashTable.get, reverse=True)
return ans[:k]
2. String to Interger(atoi) [80ms]
# 方法1:首先要过滤掉开始的空格和0
# 然后在判断符号和过滤中间的空格和0
# 如果遇到符号就要判断后面的数
# 最后溢出检测
class Solution(object):
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
if len(str) < 1:
return 0
sign = 1
i = 0
ans = 0
while str[i] == " " or str[i] == "0":
i += 1
if str[i] == "-":
sign = -1
i += 1
elif str[i] == "+":
i += 1
else:
while str[i] == " " or str[i] == "0":
i += 1
while (i < len(str)) and (str[i] in "0123456789"):
ans = ans * 10 + int(str[i])
i += 1
if sign * ans > 2**31 - 1:
return 2**31 - 1
elif sign * ans < -2**31:
return -2**31
else:
return sign * ans
3.Find the Difference [72ms]
# 方法1:哈希表
class Solution(object):
def findTheDifference(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
d = {}
for i in s:
if i not in d.keys():
d[i] = 1
else:
d[i] += 1
for j in t:
if j in d.keys():
d[j] -= 1
if d[j] == 0:
del d[j]
else:
return j
for i in d.keys():
return d[i]
4.Implement strStr() [68ms]
# 方法1:双指针法,其实总共用了三个指针
class Solution(object):
def strStr(self, haystack, needle):
if len(needle) == 0:
return 0
ans = -1
for h in range(len(haystack) - len(needle) + 1):
if haystack[h] == needle[0]:
nn = 1
n = h + 1
while nn < len(needle):
if haystack[n] == needle[nn]:
nn += 1
n += 1
else:
break
if nn == len(needle):
ans = h
break
return ans
5.Intersection of Two Array [45ms]
# 方法1:哈希表 [89ms]
# 方法2:参考discuss的two pointer,先移动到相同的位置
# 再判断ans是否为空或者是可行解 [45ms]
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
ans = []
if len(nums1) == 0 or len(nums2) == 0:
return ans
hashTable = {}
for i in nums1:
if str(i) not in hashTable.keys():
hashTable[str(i)] = 1
for j in nums2:
if str(j) in hashTable.keys():
ans.append(j)
del hashTable[str(j)]
return ans
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
ans = []
nums1.sort()
nums2.sort()
i = j = 0
while i < len(nums1) and j < len(nums2):
if nums1[i] > nums2[j]:
j += 1
elif nums1[i] < nums2[j]:
i += 1
else:
if len(ans) == 0 or nums1[i] != ans[-1]:
ans.append(nums1[i])
i += 1
j += 1
return ans
6.Reverse String [64ms]
# 方法1:自己写的双指针
# 方法2:用内置方法比自己写的快多了
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
tmp = list(s)
low, high = 0, len(s) - 1
while low < high:
tmp[low], tmp[high] = tmp[high], tmp[low]
low += 1
high -= 1
return "".join(tmp)
class Solution(object):
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
s = list(s)
s.reverse()
return "".join(s)
7.Single Number [52ms]
# 方法1:利用异或运算
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1, len(nums)):
nums[0] ^= nums[i]
return nums[0]