LeetCode第88题: 合并两个有序数组
- 使用双指针法
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
mid = []
i = 0
j = 0
t = 0
length1 = len(nums1)
length2 = len(nums2)
while i < m and j < n:
if nums1[i] < nums2[j]:
mid.append(nums1[i])
i += 1
else:
mid.append(nums2[j])
j += 1
if i != m:
mid += nums1[i:m]
if j != n:
mid += nums2[j:n]
for i in range(0, len(mid)):
nums1[i] = mid[i]
复杂度分析: 时间复杂度O(n+m), 空间复杂度O(n+m)
LeetCode第89题: 格雷编码
- 每次将之前的数组逆序再加上一定的偏移值, 在于原数组相加即可
class Solution:
def grayCode(self, n: int) -> List[int]:
if n == 0:
return [0]
result = [0, 1]
i = 2
while i <= n:
num = 2 ** (i - 1)
mid = result[:]
for j in range(0, len(mid)):
mid[j] += num
result += mid[::-1]
i += 1
return result
LeetCode第104题: 二叉树的最大深度
- 使用递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if (root == None):
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1