随笔分类 - 算法与数据结构
摘要:dp方法 def longest_palindrome(s): # input: str output: longest substing # 对于空字符、一个字符,都是其本身 if not s: return '' n = len(s) print(f"字符长度:{n}") # state is_
阅读全文
摘要:g功能:快速查找前缀符、字符 class Trie(object): def __init__(self): self.child = {} def insert(self, word): current = self.child for w in word: if w not in current
阅读全文
摘要:问题:给你一个字符矩阵和单词列表,输出字符矩阵能够组合成列表中的哪些词 dfs回溯算法+剪枝 # 字符矩阵+字典 -> 矩阵和字典中同时存在的词 dic = ["doaf", "agai", "dcan"] dic = [['d', 'o', 'a', 'f'], ['a', 'g', 'a', '
阅读全文
摘要:dfs方法 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] class Solution: def permutation(self, s: str) -> List[str]: if not s: return s chars = sor
阅读全文
摘要:方法一 深度优先遍历 def k_sum(nums, k, target): if not nums: return subsets = [] dfs(nums, 0, k, target, [], subsets) return subsets # 1.递归的定义 def dfs(nums, in
阅读全文
摘要:在随机初始化中使用该模块 # 列表中的数据随机分布 import random n = 10 path = [i for i in range(1,n+1)] print(f'初始化10个数: {path}\n将其随机打乱->') for i in range(2,n): j = random.ra
阅读全文
摘要:问题:给定一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 回溯dfs class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: res = [] self.back_track
阅读全文
摘要:问题理解: 一共有 n 门课要上,编号为 0 ~ n-1。 先决条件[1, 0],意思是必须先上课 0,才能上课 1。 给你 n 、和一个先决条件表,请你判断能否完成所有课程。 bfs方法模板 def find_order(n=4): courses = [[1, 0], [2, 0], [3, 1
阅读全文
摘要:BitMap算法的核心思想是用bit数组来记录0-1两种状态,然后再将具体数据映射到这个比特数组的具体位置,这个比特位设置成0表示数据不存在,设置成1表示数据存在。 BitMap算在在大量数据查询、去重等应用场景中使用的比较多,这个算法具有比较高的空间利用率。 class Bitmap(): def
阅读全文
摘要:主体代码模板: from collections import deque # 使用双端队列deque,Queue更为复杂不可用 def bfs(): queue = deque([root]) # 队列数据结构实现 visited = set(root) # 标记访问节点 while queue:
阅读全文
摘要:单调栈专题,可以按照这个列表来刷。 [LeetCode-42] 接雨水 [LeetCode-239] 滑动窗口最大值 [LeetCode-496] 下一个更大元素 I [LeetCode-503] 下一个更大元素 II [LeetCode-739] 每日温度 [LeetCode-901] 股票价格跨
阅读全文
摘要:双指针的两种方法 方法一:时间复杂度logN,空间复杂度1 nums = [1,2,0,5,7,0] low = 0 # 指向非零部分的最后一个位置 fast = 0 # 遍历列表元素 n = len(nums) while fast < n: # 走一遍,原始空间上已经存有非零数字 if nums
阅读全文
摘要:由九章算法-令狐提出 data = [1,3,6,8,8,12,88,943] # 第一个等于target的索引位置 def binarySearch(nums,target): if not nums: return -1 start, end = 0, len(nums)-1 while sta
阅读全文
摘要:平均时间复杂度: nlogn 最为常用的排序算法 def quick_sort(data, start, end): # 快排原地排序,直接对原list排序,没有返回值 if start>=end: return # 开始结束索引不能破坏 left, right = start, end mid =
阅读全文
摘要:先分再治 def merge_sort(data): if len(data)==1: return data mid = len(data) // 2 print(mid) left, right = data[:mid], data[mid:] return merge(merge_sort(l
阅读全文
摘要:问题: # 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),# 并返回该子数组所对应的乘积。 # # # # 示例 1: # # 输入: [2,3,-2,4]# 输出: 6# 解释: 子数组 [2,3] 有最大乘积 6。 方法:动态规划,构建两个dp,
阅读全文
摘要:问题: # 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 # # 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,po# s 仅仅是用于标识环的情况,并不会作为参数
阅读全文
摘要:问题: # 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 # # # # 实现 LRUCache 类: # # # LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 # int get(int key) 如果关键
阅读全文