算法
文章平均质量分 87
1. 掌握数据结构对应的java类,并熟练使用
2. 算法解题思路
3. 使用一些结构去灵活解题,比如:堆、前缀树等
4. 刷题汇总
ElegantCodingWH
子非吾,焉之吾之乐也
展开
-
二叉树:利用二叉树的后序遍历解决部分树型动态规划问题
1. 算法流程 (4步) 2. 第二步中的3种情况 2.1 左子树怎样,右子树怎样,且左右子树间满足某种条件 2.2 讨论与x有关和与x无关两种情况 3. 第四步中的2种常用手法 4. 推广到解决n叉树原创 2022-09-06 15:24:04 · 293 阅读 · 0 评论 -
KMP算法你真的懂了吗?详细讲解KMP算法,理解每一个细节
文章目录1. 前言2. KMP算法2.1 KMP算法介绍2.1.1 Why exit KMP2.1.2 KMP的思想3.1.3 KMP部分代码2.1.4 求next数组2.2 KMP算法的实现代码2.3 改进的KMP算法2.4 小结 1. 前言 本文中我使用的串方式如下图所示: 文中的串我都记为s s[0]不存放字符,从s[1]开始存放字符。 i表达指向主串的指针,j表示指向模式串的指针。 2. KMP算法 2.1 KMP算法介绍 2.1.1 Why exit KMP 传统的BF算法有一个缺点: 当原创 2020-05-12 19:53:26 · 1168 阅读 · 0 评论 -
算法复杂度的今生今世
算法是一个抽象的概念。可以理解为:一组输入数据经过正确、确定、可行的有限步运算后得到的输出结果,中间的就是我们所说的算法。 需要注意的是,正确性、确定性、可行性和有穷性由数学问题的性质决定的,而不是程序的特点。举一个例子,序列: 根据定义,你可能直接写出程序: 但是,这样你从源头上就错了,先不考虑程序,针对于这个问题,你能确保给定任意一个数,其序列的长度是有限的?也就是,然而,这个问题到现在都还被解决,是一个不确定问题,不符合有穷性,所以其不是一个算法。自然的,对于上面的程序也不是一个算法程序。 所以原创 2020-04-17 13:56:37 · 279 阅读 · 0 评论 -
算法设计---动态规划如何思考?如何学习?有何规律?(基础)
文章目录一、动态规划1. 什么是动态规划?2. 为什么会有动态规划?3. 动态规划解题步骤二、习题练习1.题目一 (LeetCode 70):2.题目二 (LeetCode 53): 一、动态规划 1. 什么是动态规划? 动态规划,就是基于我们写的状态转换方程,将需要用到的子解计算并记录下来,来避免重复计算子解,使得解决问题更加高效。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者...原创 2019-12-18 21:48:30 · 414 阅读 · 0 评论 -
贪心算法---买卖股票的最佳时机 II(LeetCode 122)
1.问题描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 实例1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出,...原创 2019-12-06 19:57:21 · 268 阅读 · 0 评论 -
动态规划---买卖股票的最佳时机(LeetCode 121)
1.问题描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 实例1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2019-12-06 17:25:07 · 253 阅读 · 2 评论 -
动态规划---最大子序和问题 (LeetCode 53)
1.问题描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 实例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 2.解题思路: 步骤一:设置dp[i][j]含义:dp[i][j]表示nums数组中第i个元素到第j个元素是最大的连续子数组。 步骤二:...原创 2019-12-05 20:35:48 · 492 阅读 · 0 评论 -
算法设计---动态规划如何思考?如何学习?有何规律?(进阶)
一、动态规划 动态规划,就是根据我们写的状态转换方程将用需要用到的子解计算并记录下来,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤。 1. 动态规划的三大步骤 步骤一:定义元素的含义非常重要,但是也是不唯一的,一般,你定义的含义不同,状态转换方程也会随之不同。一般是题目问什么,元素的含义就代表什...原创 2019-12-03 20:07:20 · 332 阅读 · 0 评论 -
python 解决 0-1 二维背包问题
问题描述:给定n种物品和一背包。物品i的重量是wi,体积是bi,其价值为vi,背包的容量为C,容积为D。问:应该如何选择装入背包种的物品,使得总价值最大? 其实,这就是一维0-1背包问题的推广,二维背包问题,只要我们把二维背包问题解决了,n维背包问题也就解决了。 二维背包问题,只不过是多加了一个体积的限制条件,那么在纬度上我们需要多加一个纬度,用来衡量体积,具体代码如下: w = [3, 2, 4...原创 2019-11-03 11:16:54 · 1854 阅读 · 0 评论