随笔分类 -  算法

摘要:很多问题都可以归结为图的遍历,但这些问题中的图却不是事先给定、从程序中读入的,而是由程序动态生成的,称为隐式图。 回溯法一般是要找一个(或者所有)满足约束的解(或者某种意义下的最优解)。 路径搜索问题可以归结为隐式图的遍历,它的任务是找到一条从初始状态到终止状态的(最优)路径。 BFS是图的广度遍历 阅读全文
posted @ 2020-03-25 00:06 小帆敲代码 阅读(594) 评论(0) 推荐(0)
摘要:练习题一:最大连续和问题:长度为n的序列,求最大连续和。 1 /** 2 * 最大连续和问题:长度为n的序列,求最大连续和。 3 * 枚举解法 4 * 时间复杂度O(n^3) 5 * @param a 6 */ 7 public static int test1(int[] a) { 8 int m 阅读全文
posted @ 2020-03-24 23:58 小帆敲代码 阅读(286) 评论(0) 推荐(0)
摘要:分而治之,各个击破 将大问题变成分成和原问题类似的小问题再分别解决每个小问题,递归地使用分而治之策略来解决 分治法的三个步骤: 划分问题:把问题的实例划分成子问题 递归求解:递归解决子问题 合并问题:合并子问题的解得到原问题的解 划分问题不一定要划分成相同的问题,可以是与原问题相似的子问题 分治法与 阅读全文
posted @ 2020-03-24 23:56 小帆敲代码 阅读(180) 评论(0) 推荐(0)
摘要:1.递归 一个直接或间接调用自身的算法称为递归算法 一个使用自身给出定义的函数称为递归函数 2.应用 如果问题的数据结构是递归的(如链表),问题的定义是递归的(如fibonacci数列),问题的解法是递归的(整数划分问题),可以考虑使用递归算法 经典问题:汉诺塔问题:设有3根标号为A,B,C的柱子, 阅读全文
posted @ 2020-03-18 15:30 小帆敲代码 阅读(470) 评论(0) 推荐(0)
摘要:递归函数不再调用他自己而是返回上一层调用,这种现象称为回溯。 当把问题分成若干个步骤并进行递归求解时,如果当前步骤没有合法选择,则函数将返回上一级调用。正是这个原因,递归枚举算法也经常被称为回溯法。 之前介绍了递归构造和简单枚举,简单枚举思路简单程序也简单,缺点是无法减小枚举量--必须生成(gene 阅读全文
posted @ 2020-03-16 21:29 小帆敲代码 阅读(220) 评论(0) 推荐(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 fo 阅读全文
posted @ 2020-03-16 19:44 小帆敲代码 阅读(251) 评论(0) 推荐(0)
摘要:RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值 RMQ(Range Minimum/Maximum Query),即区间最值查询。 常见解法: 1.朴素搜索 2.线段树 3.DP 4.神奇的笛卡尔树(https://www.cnblogs.com/jklongint/p/4777448. 阅读全文
posted @ 2020-03-15 20:47 小帆敲代码 阅读(322) 评论(0) 推荐(0)
摘要:A.1Mb=1024Kb B.多少个9 问题描述 在1至2019中,有多少个数的数位中包括数字9? 注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含三个数位9,但在计算时只算做一个数。 在考试中,不知道1至2019的至中包不包括2019这个数,从结果上看应该是包括的:[1, 阅读全文
posted @ 2020-03-15 17:43 小帆敲代码 阅读(940) 评论(0) 推荐(0)
摘要:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 阅读全文
posted @ 2020-03-13 23:03 小帆敲代码 阅读(204) 评论(0) 推荐(0)
摘要:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 阅读全文
posted @ 2020-03-11 22:23 小帆敲代码 阅读(161) 评论(0) 推荐(0)
摘要:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums 阅读全文
posted @ 2020-03-11 14:24 小帆敲代码 阅读(90) 评论(0) 推荐(0)
摘要:[问题描述] 考虑如下的序列生成算法:从整数 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 阅读全文
posted @ 2020-02-06 11:18 小帆敲代码 阅读(306) 评论(0) 推荐(0)
摘要:题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 阅读全文
posted @ 2019-08-31 11:35 小帆敲代码 阅读(182) 评论(0) 推荐(0)
摘要:题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd"输出: "bb" 来源:力扣(LeetCode)链接:https://leet 阅读全文
posted @ 2019-08-31 00:00 小帆敲代码 阅读(137) 评论(0) 推荐(0)