随笔分类 - 算法
摘要:背包问题 1 01背包和完全背包问题 01背包问题 有N件物品和一个容量为V的背包,第i件物品的体积是v[i]、价值是w[i],每种物品只可以使用一次,求将哪些物品放入背包可以使得价值总和最大。这里的w是weight即权重的意思 这是最基础的背包问题,"01"就是指每种物品要么选要么不选,我们定义状
阅读全文
摘要:线性DP的力扣题目练习 这一章将会介绍线性动态规划的相关概念和经典问题,并给出一些练习题供大家演练。 用动态规划解决问题的过程有以下几个关键点:状态定义,状态的转移,初始化和边界条件。 状态定义 就是定义子问题,如何表示目标规模的问题和更小规模的问题。例如常见的方法:定义状态 dp[n],表示规模为
阅读全文
摘要:线性模型与区间DP 1 线性模型 基本概念 这里的线性是指状态的排布是线性的 线性模型是动态规划中最常用的模型 一般的代码模型是: for(int i = 0; i < n; i++) { for(j = 0; j < i; j++) { // Todo: 更新dp的具体逻辑 } } 最典型的一个例
阅读全文
摘要:动态规划简介 1 动态规划的基本概念 阶段、状态、决策、策略、状态转移方程 1) 阶段和阶段变量 将问题的全过程恰当地分成若干个相互联系的阶段闫氏DP分析法:对应f[i][j]的ij遍历时形成的所有f[i][j] 阶段的划分一般根据时间和空间的自然特征去划分 阶段的划分便于把问题转化成多阶段决策问题
阅读全文
摘要:2023-04-29 动态规划介绍 动态规划是运筹学课程的一部分 多阶段决策问题 有一类活动的过程,可以分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果 当然,每个阶段的决策的选取不是任意确定的,它依赖于当前的状态,又会影响以后的发展 如下图,①、②...n这
阅读全文
摘要:LeetCode精选题目20道 1.56.合并区间 贪心 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6]
阅读全文
摘要:2023-04-26 力扣LeetCode上的DP动态规划问题分类汇总 1、线性 DP 最经典单串: 300. 最长上升子序列 最经典双串: 1143. 最长公共子序列 经典问题: 120. 三角形最小路径和 53. 最大子序和 152. 乘积最大子数组 887. 鸡蛋掉落(DP+二分) 354.
阅读全文
摘要:贪心算法 1 贪心选择例题 455.饼干分配 假设你想给小朋友们饼干。每个小朋友最多能够给一块儿饼干。每个小朋友都有一个“贪心指数”,称为g(i),g(i)表示的是这名小朋友需要的饼干大小的最小值。同时,每个饼干都有一个大小值s(i)。如果s(j) >= g(i),我们将饼干j分给小朋友i后,小朋友
阅读全文
摘要:动态规划 1 什么是动态规划 以菲波那切数列求和为例,通过 1.普通的递归 2.引入记忆数组memo 3.自下而上地解决问题,即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for
阅读全文
摘要:递归和回溯 0 递归与回溯的异同 参考文章 递归与回溯 递归与回溯的理解 回溯和递归区别 比较 | | 递归 | 回溯 | | | | | | 定义 | 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来定义自己的方法,称为递归定义。形式如
阅读全文
摘要:二叉树和递归 0 LeetCode297 二叉树的序列化和反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定
阅读全文
摘要:栈和队列 1 栈的基础应用:20.括号匹配 class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++)
阅读全文
摘要:2023-04-15 算法面试中常见的链表问题 本章的两个基础类如下 链表的节点类。toString()在debug时实时查看链表很有用 /*********************************************************** * @Description : 链表的
阅读全文
摘要:2023-04-14 算法面试中常见的查找表问题 1 Set的使用 LeetCode349号问题:两个数组的交集 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [
阅读全文
摘要:数组中的问题其实最常见 通过基础问题,掌握写出正确算法的“秘诀” 巧妙使用双索引技术,解决复杂问题 对撞指针- 滑动窗口 1 从二分查找法看如何写出正确的程序 本节学习重点:处理边界问题! 1.确定边界范围方法,先用区间表示,即明确范围的数学定义,后用代码表示; 2.在循环里维护循环不变量,能保证算
阅读全文
摘要:无向图的匹配问题 之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想 1 最大匹配和完美匹配 二分图回顾 二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多二分图内容参考第4章 二分图相关 最大匹配和完全匹配的概念 一旦在二
阅读全文
摘要:网络流和最大流问题 1 网络流和最大流问题阐述 网络流基本概念 网络流图中,从源点出发,在满足每条边容量限制的条件下,汇点t最多能接收多少流量 s:source t:target 网络流需要满足的限制 容量限制 平衡限制:除了源点s和汇点t,对于每一个点,流入量等于流出量 从源点s流出的流量,一定等
阅读全文
摘要:有向图及相关算法 1 有向图的实现 有向图的的应用场景 社交网络中的关注 互联网连接 程序模块的引用 任务调度 学习计划 食物链 论文引用 无向图是特殊的有向图,即每条边都是双向的 改进Graph和WeightedGraph类使之支持有向图 Graph类的改动 WeightedGraph类的改动 2
阅读全文
摘要:无向有权图之最短路径问题 1 有权图的最短路径问题 什么是有权图的最短路径问题? 从图中的一个点到另一个点的路径中,权值总和最小的路径就是最短路径 最短路径的应用场景 高德导航两个地点之间的路线,一般都是规划地最短路径 互联网中对数据进行路由,一般都是选最优的路径进行数据传送 单源最短路径问题 无权
阅读全文
摘要:无向有权图之最小生成树问题 前10章我们讲解地都是无向无权图,本章我们将讲解无向有权图,以及无向有权图的经典问题:最小生成树问题(MST:Minimum Spanning Tree) 1~2 无向有权图的实现 主要是用TreeMap代替了无向无权图的TreeSet 本节用到的图 上面的graph.t
阅读全文
