随笔分类 -  算法

摘要:##问题描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如: 阅读全文
posted @ 2020-09-12 09:34 小帆敲代码 阅读(151) 评论(0) 推荐(0)
摘要:##问题描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 阅读全文
posted @ 2020-09-10 19:13 小帆敲代码 阅读(118) 评论(0) 推荐(0)
摘要:##问题描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" ##解法 思路很简单,首先想到若情况为回文字符串 阅读全文
posted @ 2020-09-10 17:51 小帆敲代码 阅读(236) 评论(0) 推荐(0)
摘要:#问题描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3 阅读全文
posted @ 2020-09-08 19:44 小帆敲代码 阅读(319) 评论(0) 推荐(0)
摘要:#问题描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 \(\color{#FF0000}{注意:假设我们的环境只能存储得下 32 位的 阅读全文
posted @ 2020-09-08 18:40 小帆敲代码 阅读(128) 评论(0) 推荐(0)
摘要:回溯法 回溯法在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任何一个结点时,总是先判断该结点是否肯定不包含问题的解,如果肯定不包含,则跳过对以该结点为根的子树搜索。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯 阅读全文
posted @ 2020-05-13 22:58 小帆敲代码 阅读(279) 评论(0) 推荐(0)
摘要:[toc] 阶乘和问题 问题描述 输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤106,n!表示前n个正整数之积。 实现思路 首先是要求阶乘和最后求末六位,但是注意到n≤106,所以计算和的时候只需要加上后六位就行(因为第七位之前的一定会被模),这样也保证了使用int类型不会 阅读全文
posted @ 2020-05-11 21:06 小帆敲代码 阅读(534) 评论(0) 推荐(0)
摘要:[toc] 问题描述 假设你想以最美观的方式布置花店的橱窗。现在你有F束不同品种的花束,同时你也有至少同样数量的花瓶(V =F)被按顺序摆成一行。这些花瓶的位置固定于架子上,并从1至V顺序编号,V是花瓶的数目,从左至右排列,则最左边的是花瓶1,最右边的是花瓶V。花束可以移动,并且每束花用1至F间的整 阅读全文
posted @ 2020-04-29 13:35 小帆敲代码 阅读(377) 评论(0) 推荐(0)
摘要:[toc] 问题描述 已知:一辆汽车加满油后可行使n公里,而旅途中有若干个加油站,试设计一个有效算法,指出应该在那个加油站停靠加油,使沿途加油次数最少,然后证明算法能产生最优解。 问题分析 用1,2,…,m表示旅途中的m个加油站,0表示出发地,用m+1表示目的地,s[0..m+1]表示加油站至出发地 阅读全文
posted @ 2020-04-28 23:13 小帆敲代码 阅读(428) 评论(0) 推荐(0)
摘要:[toc] 问题描述 在一条公路上埋有若干堆地雷,每堆地雷有一定的数量,地雷堆的编号为1,2,…,N,例如,埋有地雷数量如下:8 14 2 17 33 26 15 17 19 6此时,地雷的数量可用一维数组A(N)表示。同时,给出地雷堆之间的联系,从第1堆开始,它指出挖了此堆之后,还可以选择继续往下 阅读全文
posted @ 2020-04-28 22:13 小帆敲代码 阅读(261) 评论(0) 推荐(0)
摘要:问题描述 从键盘输入一个高精度的正整数n( 例如,n=178543,S=4 最优解13 递归 假设刚开始的这一个正整数n,表示为$a_1$...$a_n$,而最优解表示为$b_1$...$b_l$其中l=n S。其实我们可以看到,如果$b_i$确定下来了,$b_i$=$a_j$,那么$b_{i+1} 阅读全文
posted @ 2020-04-27 23:04 小帆敲代码 阅读(375) 评论(0) 推荐(0)
摘要:多段图的最短路 给一个M行N列的整数矩阵,从第一列任何一个位置出发,每次往右,右上和右下走一格,最终达到最后一列。要求经过的整数之和最小,整个矩阵是环形的即第一行的上一行是最后一行,最后一行的下一行是第一行,输出路径上每列的行号,多解时输出字典序最小的 思路:很明显每一列是一个阶段。(阶段) 需要填 阅读全文
posted @ 2020-04-27 09:26 小帆敲代码 阅读(279) 评论(0) 推荐(0)
摘要:[toc] 问题描述 有n个物品,第i种物品的价值为$p_i$重量为$W_i$,选一些物品到一个容量为C的背包里,使得背包内物品在总重量不超过C的前提下,价值尽量大。 问题分析 在之前我们了解贪心思想的时候曾经有过类似的题目那时候物品是可拆分的我们只需要选择单位重量最大的物品即可。但是在这里,每一个 阅读全文
posted @ 2020-04-23 00:07 小帆敲代码 阅读(607) 评论(0) 推荐(0)
摘要:相邻 环形 总结 (1)相邻:在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆。规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。选择一种合并石子的方案,使得做n-1次合并,得分的总和最小。 1 /* 2 * 在一个圆形操场的四周摆 阅读全文
posted @ 2020-04-20 21:21 小帆敲代码 阅读(355) 评论(0) 推荐(0)
摘要:问题描述:给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,我们要计算这n个矩阵的最少计算次数。 将多个矩阵连乘抽象为最后一次计算即两个矩阵相乘。 1 public static void test(int[]p) { 2 int n=p.length-1; 3 int[][] 阅读全文
posted @ 2020-04-13 19:02 小帆敲代码 阅读(216) 评论(0) 推荐(0)
摘要:DAG上的动态规划: 有向无环图上的动态规划是学习DP的基础,很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 1.没有明确固定起点重点的DAG模型: 嵌套矩形问题:有n个矩形,每个矩形可以用两个整数a、b表示它的长和宽,矩形可以嵌套在矩形中当且仅当a<c,b<d或者b<c,a<d。选出 阅读全文
posted @ 2020-04-01 23:34 小帆敲代码 阅读(197) 评论(0) 推荐(0)
摘要:动态规划=分治(不是等分,是多阶段)+避免重复计算 是一个多阶段决策问题 核心是状态和状态转移方程 数字三角问题(单向无环最长/最短路径问题): 现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图所示,试找出从结点A到结点E的最短距离 递推公式(状态转移方程): 递归 阅读全文
posted @ 2020-03-30 21:43 小帆敲代码 阅读(367) 评论(0) 推荐(0)
摘要:其实滑动窗口类似队列一样,对一些数组区间挺好用的 滑动窗口 输入一个长度为n的序列,寻找尽量长的子序列,使得该子序列中没有相同的元素 思路:每次进来一个a[R],窗口拉伸用map记录出现的元素的下标,如果a[R]的已经出现过并且上次出现的下标值位于[L,R]区间,判断当前子序列[L,R-1]的长度是 阅读全文
posted @ 2020-03-30 00:52 小帆敲代码 阅读(153) 评论(0) 推荐(0)
摘要:贪心是一种解决问题的策略。 贪心算法就是按照贪心策略一步一步去求,当贪心选择最优时,具有贪心选择性质(最开始的贪心选择被包含在最优解中)和最优子结构性质。 与DP的区别:贪心是自顶向下的(递归),贪心可以看作DP中的某一个选择策略,DP是全局的。 背包相关问题 最优装载问题:给出n个物体,第i个物体 阅读全文
posted @ 2020-03-25 22:29 小帆敲代码 阅读(201) 评论(0) 推荐(0)
摘要:斐波那契数列 兔子问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?” 分析:第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还 阅读全文
posted @ 2020-03-25 11:45 小帆敲代码 阅读(270) 评论(0) 推荐(0)