2021年5月20日
1.Two Sum
给定数组nums和目标值target,求nums中两个a,b的索引,a,b唯一满足a + b = target。
class Solution:
def twoSumb(self, nums: List[int], target: int) -> List[int]:
d = {} #创建字典d,键保存所配对的值,值保存当前值的索引
for i , n in enumerate(nums):
if n in d: return [d[n], i] #如果当前值即是所要寻找的值
d[target - n] = i
时间复杂度:O(N)
2.Add Two Numebrs
给定两个链表l1和l2,链表中小端存放两个非负整数,求两个整数的和并用链表表示
#Definition for singly-Linked List
#class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1:ListNode, l2:ListNode, carry = 0) -> ListNode:
if not (l1 or l2): return ListNode(1) if carry else None
l1, l2 = l1 or ListNode(0), l2 or ListNode(0)
val = l1.val + l2.val + carry
l1.val, l1.next = val % 10, self.addTwoNumber(l1.next, l2.next, val > 9)
return l1
3.无重复字符串的最长子串
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
#哈希集合, 记录每个字符是否出现过
occ = set()
n = len(s)
#右指针,初始值为-1, 相当于我们在字符串的最左侧还没开始移动
rk, ans = -1, 0
for i in range(n):
if i != 0:
occ.remove(s[i - 1])
while rk + 1 < n and s[rk + 1] not in occ:
occ.add(s[rk + 1])
rk += 1
ans = max(ans, rk - i + 1)
return ans
时间复杂度:O(N)
空间复杂度:O(|\sigma|)
5 .
pass
7 . 反转整数
给定一个32位的有符号整数x,返回将x中的数字部分反转后的结果
class Solution:
def reverse(self, x):
r = x // max(1, abs(x)) * int(str(abs(x))[: : -1])
return r if r.bit_length() < 32 or r == -2 ** 31 else 0
浙公网安备 33010602011771号