![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法
小帆敲代码
这个作者很懒,什么都没留下…
展开
-
LeetCode最长回文子串
题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd"输出: "bb" 来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro...原创 2019-08-31 00:00:00 · 98 阅读 · 0 评论 -
LeetCode寻找两个有序数组的中位数
题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 2.0 示例 2:&...原创 2019-08-31 11:35:00 · 87 阅读 · 0 评论 -
1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法一:暴...原创 2020-03-11 14:24:00 · 65 阅读 · 0 评论 -
2.两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2020-03-11 22:23:00 · 81 阅读 · 0 评论 -
3.无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所...原创 2020-03-13 23:03:00 · 115 阅读 · 0 评论 -
蓝桥杯校内赛题解
A.1Mb=1024KbB.多少个9问题描述在1至2019中,有多少个数的数位中包括数字9?注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含三个数位9,但在计算时只算做一个数。在考试中,不知道1至2019的至中包不包括2019这个数,从结果上看应该是包括的:[1,2029]C. 长草问题描述小明有一块空地,他将这块空地划分为 n 行 m 列的小...原创 2020-03-15 17:43:00 · 153 阅读 · 0 评论 -
static RMQ
RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值RMQ(Range Minimum/Maximum Query),即区间最值查询。常见解法:1.朴素搜索2.线段树3.DP4.神奇的笛卡尔树(https://www.cnblogs.com/jklongint/p/4777448.html?utm_source=tuicool)1.朴素搜索max=a[L];...原创 2020-03-15 20:47:00 · 90 阅读 · 0 评论 -
第七章 (一)暴力求解法
枚举排列:(递归枚举)A.输入整数n,按字典序从小到大的顺序输出前n个数的所有排序 1 //递归,n是n个数,a是数组,cur是当前 2 public static void print_permutation(int n,int[]a,int cur) { 3 if(n==cur) { 4 for(int i=0;i<...原创 2020-03-16 19:44:00 · 244 阅读 · 0 评论 -
第七章 (三)回溯
递归函数不再调用他自己而是返回上一层调用,这种现象称为回溯。当把问题分成若干个步骤并进行递归求解时,如果当前步骤没有合法选择,则函数将返回上一级调用。正是这个原因,递归枚举算法也经常被称为回溯法。之前介绍了递归构造和简单枚举,简单枚举思路简单程序也简单,缺点是无法减小枚举量--必须生成(generate)所有可能的解,然后一一检查(test)。在递归构造中,回溯将生成和检查的过程有...原创 2020-03-16 21:29:00 · 117 阅读 · 0 评论 -
第七章 (二)递归
1.递归一个直接或间接调用自身的算法称为递归算法一个使用自身给出定义的函数称为递归函数2.应用如果问题的数据结构是递归的(如链表),问题的定义是递归的(如fibonacci数列),问题的解法是递归的(整数划分问题),可以考虑使用递归算法经典问题:汉诺塔问题:设有3根标号为A,B,C的柱子,在A柱上放着n个盘子,每一个都比下面的略小一点,要求把A柱上的盘子全部移到C柱上,...原创 2020-03-18 15:30:00 · 295 阅读 · 0 评论 -
第八章 (一)分治
分而治之,各个击破将大问题变成分成和原问题类似的小问题再分别解决每个小问题,递归地使用分而治之策略来解决分治法的三个步骤:划分问题:把问题的实例划分成子问题递归求解:递归解决子问题合并问题:合并子问题的解得到原问题的解划分问题不一定要划分成相同的问题,可以是与原问题相似的子问题分治法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以: 1) 把它分成两个或...原创 2020-03-24 23:56:00 · 130 阅读 · 0 评论 -
第八章 (一)分治 练习题
练习题一:最大连续和问题:长度为n的序列,求最大连续和。 1 /** 2 * 最大连续和问题:长度为n的序列,求最大连续和。 3 * 枚举解法 4 * 时间复杂度O(n^3) 5 * @param a 6 */ 7 public static int test1(int[] a) { 8 int ...原创 2020-03-24 23:58:00 · 232 阅读 · 0 评论 -
斐波那契数列
斐波那契数列兔子问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?”分析:第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还没有繁殖能力,所以一共是三对,以此类推,可以列出下表表中1,1,2,3,5,8,1...原创 2020-03-25 11:45:00 · 141 阅读 · 0 评论 -
第八章 (二)贪心法
贪心是一种解决问题的策略。贪心算法就是按照贪心策略一步一步去求,当贪心选择最优时,具有贪心选择性质(最开始的贪心选择被包含在最优解中)和最优子结构性质。与DP的区别:贪心是自顶向下的(递归),贪心可以看作DP中的某一个选择策略,DP是全局的。背包相关问题最优装载问题:给出n个物体,第i个物体重量为wi.选择最多的物体,使得总重量不超过C。每次都选择装最轻的,这是一种典型...原创 2020-03-25 22:29:00 · 151 阅读 · 0 评论 -
第八章(三)滑动窗口
其实滑动窗口类似队列一样,对一些数组区间挺好用的滑动窗口输入一个长度为n的序列,寻找尽量长的子序列,使得该子序列中没有相同的元素思路:每次进来一个a[R],窗口拉伸用map记录出现的元素的下标,如果a[R]的已经出现过并且上次出现的下标值位于[L,R]区间,判断当前子序列[L,R-1]的长度是否更新,再更新L为a[R]上次出现过的下标值+1,这时子序列的区间为[L,R]。如果a...原创 2020-03-30 00:52:00 · 150 阅读 · 0 评论 -
第九章 (一)动态规划
动态规划=分治(不是等分,是多阶段)+避免重复计算是一个多阶段决策问题核心是状态和状态转移方程数字三角问题(单向无环最长/最短路径问题):现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图所示,试找出从结点A到结点E的最短距离递推公式(状态转移方程):递归如果用递归的方法,独立性太强而这种dp问题各个阶段之间具有联系,如果...原创 2020-03-30 21:43:00 · 854 阅读 · 0 评论 -
蓝桥杯备战(一)3n+1问题
[问题描述]考虑如下的序列生成算法:从整数 n 开始,如果 n 是偶数,把它除以 2;如果 n 是奇数,把它乘 3 加1。用新得到的值重复上述步骤,直到 n = 1 时停止。例如,n = 22 时该算法生成的序列是:22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1人们猜想(没有得到证明)对于任意整数 n,该算法总能终止于 n = 1。这个猜想...原创 2020-02-06 11:18:00 · 298 阅读 · 0 评论 -
第七章 (四)BFS(路径寻找问题)
很多问题都可以归结为图的遍历,但这些问题中的图却不是事先给定、从程序中读入的,而是由程序动态生成的,称为隐式图。回溯法一般是要找一个(或者所有)满足约束的解(或者某种意义下的最优解)。路径搜索问题可以归结为隐式图的遍历,它的任务是找到一条从初始状态到终止状态的(最优)路径。BFS是图的广度遍历,借助队列来实现。(其实觉得图真的蛮重要,递归可以视作解答树的深度遍历这里又出现了...原创 2020-03-25 00:06:00 · 288 阅读 · 0 评论 -
第九章(二)DAG上的动态规划
DAG上的动态规划:有向无环图上的动态规划是学习DP的基础,很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。1.没有明确固定起点重点的DAG模型:嵌套矩形问题:有n个矩形,每个矩形可以用两个整数a、b表示它的长和宽,矩形可以嵌套在矩形中当且仅当a<c,b<d或者b<c,a<d。选出尽量多的矩形排成一行,使得除了最后一个之外,每个矩形都可以嵌套在下...原创 2020-04-01 23:34:00 · 178 阅读 · 0 评论 -
dp规划之矩阵连乘问题
问题描述:给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,我们要计算这n个矩阵的最少计算次数。将多个矩阵连乘抽象为最后一次计算即两个矩阵相乘。 1 public static void test(int[]p) { 2 int n=p.length-1; 3 int[][] m=new int[n+1][n+1];//...原创 2020-04-13 19:02:00 · 148 阅读 · 0 评论 -
DP之石子堆合并问题
相邻环形总结(1)相邻:在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆。规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。选择一种合并石子的方案,使得做n-1次合并,得分的总和最小。 1 /* 2 * 在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并...原创 2020-04-20 21:21:00 · 366 阅读 · 0 评论 -
DP动态规划之01背包问题
目录问题描述问题分析问题求解Java代码实现优化方向一:时间方面:因为是j是整数是跳跃式的,可以选择性的填表。思考二:处理j(背包容量),w(重量)不为整数的时候,因为j不为整数了,它就没办法作为数组下标使用。总结问题描述有n个物品,第i种物品的价值为\(p_i\)重量为\(W_i\),选一些物品到一个容量为C的背包里,使得背包内物品在总重量不超过C的前提下,价值尽量大。问题分...原创 2020-04-23 00:07:00 · 102 阅读 · 0 评论 -
第九章(三)多阶段决策问题
多段图的最短路给一个M行N列的整数矩阵,从第一列任何一个位置出发,每次往右,右上和右下走一格,最终达到最后一列。要求经过的整数之和最小,整个矩阵是环形的即第一行的上一行是最后一行,最后一行的下一行是第一行,输出路径上每列的行号,多解时输出字典序最小的思路:很明显每一列是一个阶段。(阶段)需要填的表是距离d(i,j)这一块到达最后一列的最短路径长度。(衡量标准)d(i,j)=min(...原创 2020-04-27 09:26:00 · 862 阅读 · 0 评论 -
删数问题
目录问题描述递归Java代码实现将n表示为数组的形式将n表示为String,用ASCII码DPJava实现代码贪心策略Java实现代码问题描述从键盘输入一个高精度的正整数n(<=240位),去掉其中任意S个数字后,剩下的数字按照从左到右的顺序重新组成一个新的数字,寻找一种方案,使得剩余的数字最小例如,n=178543,S=4 最优解13递归假设刚开始的这一个正...原创 2020-04-27 23:04:00 · 300 阅读 · 0 评论 -
挖地雷问题
目录问题描述DP一:使用二维数组主要思想Java代码实现运行结果DP二:使用一维数组主要思想Java代码实现运行结果问题描述在一条公路上埋有若干堆地雷,每堆地雷有一定的数量,地雷堆的编号为1,2,…,N,例如,埋有地雷数量如下:8 14 2 17 33 26 15 17 19 6此时,地雷的数量可用一维数组A(N)表示。同时,给出地雷堆之间的联系,从第1堆开始,它...原创 2020-04-28 22:13:00 · 532 阅读 · 0 评论 -
汽车加油问题
目录问题描述问题分析证明算法可以产生最优解最优解包含我们的贪心选择具有最优子结构Java代码实现运行结果问题描述已知:一辆汽车加满油后可行使n公里,而旅途中有若干个加油站,试设计一个有效算法,指出应该在那个加油站停靠加油,使沿途加油次数最少,然后证明算法能产生最优解。问题分析用1,2,…,m表示旅途中的m个加油站,0表示出发地,用m+1表示目的地,s[0..m+1]表示加油...原创 2020-04-28 23:13:00 · 489 阅读 · 0 评论 -
花店橱窗布置问题(FLOWER)
目录问题描述问题分析Java代码实现运行结果今天老师上完课说所有花都要被放,这个算法还是考虑多了,包含了这个选择,代码就不给了,用dp思想就可以解决了。问题描述假设你想以最美观的方式布置花店的橱窗。现在你有F束不同品种的花束,同时你也有至少同样数量的花瓶(V>=F)被按顺序摆成一行。这些花瓶的位置固定于架子上,并从1至V顺序编号,V是花瓶的数目,从左至右排列,则最左边的是...原创 2020-04-29 13:35:00 · 681 阅读 · 1 评论 -
回溯(二)
目录回溯法回溯法的解空间回溯法的基本思想剪枝函数回溯法算法框架背包问题和旅行售货员问题的解空间树是两种典型的解空间树。子集树算法框架排列树算法框架回溯法回溯法在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任何一个结点时,总是先判断该结点是否肯定不包含问题的解,如果肯定不包含,则跳过对以该结点为根的子树搜索。否则,进入该子树,继续按深...原创 2020-05-13 22:58:00 · 251 阅读 · 0 评论 -
三道简单算法题
目录阶乘和问题问题描述实现思路核心代码运行截图猴子吃桃问题问题描述实现思路核心代码运行截图矩阵连乘的乘法次数问题问题描述实现思路核心代码运行截图阶乘和问题问题描述输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤106,n!表示前n个正整数之积。实现思路首先是要求阶乘和最后求末六位,但是注意到n≤106,所以计算和的时候只需要加上后六位就行(因为第七位...原创 2020-05-11 21:06:00 · 623 阅读 · 0 评论