算法
hengjiwang
life is short.
展开
-
用 python 实现大小堆 & Top K 问题
用 python 实现大小堆 & Top K 问题python的 heapq 模块提供了堆队列(优先队列)的实现,默认是最小堆,即父节点不小于任意一个子节点使用最小堆可以实现前 K 大的问题,原理是维护一个长度为 K 的堆,每插入一个新元素就弹出之前的最小值,从而最终只剩最大的 K 个值如想解决前 K 小的问题,则需要将所有元素取负后加入堆,这样最终维持的是所有元素负数中最大的 K 个,再次取负后则得到最小的 K 个元素案例题目:1509. Minimum Difference Betwe原创 2020-08-25 08:52:11 · 638 阅读 · 0 评论 -
Dijkstra算法的两种写法和时间复杂度计算
Dijkstra算法的两种写法和时间复杂度计算基于集合的写法 (适用于稠密图)算法示例代码复杂度基于优先队列的写法(适用于稀疏图)算法示例代码复杂度两者比较Dijkstra算法是一种单源最短路径算法,是 BFS 的延伸基于集合的写法 (适用于稠密图)算法初始化距离向量 ddd(长度为 VVV),起点设为0,其他点设为无穷大初始化集合 QQQ,含义为尚未确定距离的顶点的集合,将所有顶点加入从 QQQ 中弹出距离最小的顶点 uuu遍历 uuu 的所有仍在 QQQ 中的邻居 www, 判断 d[u原创 2020-08-25 04:29:09 · 11046 阅读 · 1 评论 -
动态规划的通用解法和案例
动态规划两大要素四个步骤案例1. 最长公共子序列 (LCS)两大要素最优子结构 (optimal substructure)一个问题的最优解包括它自问子问题的最优解重叠子问题 (overlapping subproblems)如使用递归算法,则某些子问题被反复访问四个步骤Characterize the structure of an optimal solution.Recursively define the value of an optimal solution.原创 2020-08-18 05:23:00 · 112 阅读 · 0 评论 -
二分法的几种形式和适用场景
二分法的几种写法一般写法多个结果找最前多个结果找最后一般写法要求找到结果返回index,否则返回-1def search(arr, target): lo = 0 hi = len(arr) - 1 while lo <= hi: mid = lo + (hi - lo) // 2 # avoid overflow if target > arr[mid]: lo = mid + 1 elif target < arr[mid]: hi = mid -原创 2020-08-17 06:56:08 · 3376 阅读 · 0 评论