1. 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
- 使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
- 不使用库内置的 sort 函数的情况下解决这个问题。
class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""left = 0right = len(nums) - 1i = 0while i <= right:if nums[i] == 0:nums[i], nums[left] = nums[left], nums[i]left += 1i += 1elif nums[i] == 2:nums[i], nums[right] = nums[right], nums[i]right -= 1else:i += 1
2. 最小覆盖子串
给定一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
from collections import Counter
class Solution:def minWindow(self, s: str, t: str) -> str:if not s or not t:return ""target_count = Counter(t)window_count = Counter()left, right = 0, 0min_window = ""min_length = float('inf')match_count = 0while right < len(s):window_count[s[right]] += 1if s[right] in target_count and window_count[s[right]] == target_count[s[right]]:match_count += 1while match_count == len(target_count):if right - left + 1 < min_length:min_length = right - left + 1min_window = s[left:right + 1]window_count[s[left]] -= 1if s[left] in target_count and window_count[s[left]] < target_count[s[left]]:match_count -= 1left += 1right += 1return min_window