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
posted @ 2021-05-20 22:03  tianle1998  阅读(79)  评论(0)    收藏  举报