自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 算法设计与分析课程总结

算法分析与设计课程总结 算法设计与分析是面向设计的核心课程,主要通过介绍常见的算法设计策略及复杂性分析方法,培养学生分析问题和解决问题的能力,为开发高效的软件系统及参加相关领域的研究工作奠定坚实的基础。该课程理论与实践并重,内容具有综合性、广泛性和系统性,是一门集应用性、创造性及实践性为一体的综合性极强的课程,通过对本课程的学习,对如下算法有了深刻的理解。 一、递归与分支策略1.分

2017-11-04 18:04:11 13099

原创 LintCode 关于动态规划问题的总结

1.动态规划是解决多阶段决策问题的一种方法。2.多阶段决策问题:如果一类问题的求解过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。3.多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果。4.最优性原理(1)不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列

2017-11-03 20:30:17 389

原创 LintCode 最长上升连续子序列

1.描述给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)注意事项 time样例 给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回4.给定 [5, 1, 2, 3, 4], 其最长上

2017-11-03 20:17:35 421

原创 LintCode 不同的路径II

1.描述"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。注意事项 m 和 n 均不超过100样例 如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角。2

2017-11-03 19:37:20 307

原创 LintCode 不同的路径

1.描述有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?注意事项 n和m均不超过100样例 给出 m = 3 和 n = 3, 返回 6.给出 m = 4 和 n = 5, 返回 35.2.分析这个相比于《LintCode 最小路径和》

2017-11-03 19:13:18 244

原创 LintCode 爬楼梯

1.描述假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例 比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法返回 32.分析每到一层有多少种爬法取决于之前是如何爬上来的,由于一次只能爬一层或两层,因此状态转移方程为dp[i]=dp[i-1]+dp[i-2]。3.代码class Sol

2017-11-02 22:27:03 2260

原创 LintCode 最小路径和

1.描述给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。注意事项 你在同一时间只能向下或者向右移动一步2.分析已经走到第i行第j个点时,判断是否可以向右或向下走,若都可以则取两者的小值。因此一般的状态转移方程为dp[i][j]+=min(dp[i+1][j],dp[i][j+1])。3.代码class

2017-11-02 22:11:17 436

原创 LintCode 数字三角形

1.描述给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。注意事项 如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。样例 比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 (

2017-11-02 21:46:14 351

原创 LintCode 栅栏染色

1.描述我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。注意事项 n和k都是非负整数样例 n = 3, k = 2, return 6 post 1, post 2, post 3way1 0 0 1 way2 0

2017-11-02 21:44:07 356

原创 Lintcode 关于分支限界算法的总结

1.分支限界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。2.分支限界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。(1)该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为限界)。(2)在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分

2017-10-31 16:11:21 575

原创 LintCode 关于回溯算法的总结

1.回溯法是一种组织搜索的一般技术,有“通用的解题法”之称,用它可以系统的搜索一个问题的所有解或任一解。2.有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。3.回溯可以系统地搜索一个问题的所有解或任意解,既有系统性又有跳跃性。4.回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。5.这种以深度优先的方式

2017-10-08 22:46:37 640

原创 LintCode Split String

1.描述Give a string, you can choose to split the string after one character or two adjacent characters, and make the string to be composed of only one character or two characters. Output all possible

2017-10-08 22:45:43 1338

原创 LintCode 关于贪心算法的总结

1.在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。2.从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。3.如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之

2017-09-24 18:35:31 463

原创 LintCode 最小子数组

1.描述给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。注意事项 子数组最少包含一个数字样例 给出数组[1, -1, -2, 1],返回 -32.分析最小子数组的思想与最大子数组及其相似,具体分析见《LintCode 最大子数组》。3.代码class Solution {public:    /*

2017-09-23 22:28:15 400

原创 LintCode 最大子数组

1.描述给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。注意事项 子数组最少包含一个数样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为62.分析找到一个最大和的子数组,注意所求子数组中的数是连续的,并不能从数组中任意选取元素相加最大和。3.代码4.总结

2017-09-23 20:06:40 311

原创 LintCode 主元素

1.描述给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。注意事项 You may assume that the array is non-empty and the majority number always exist in the array.样例 给出数组[1,1,1,1,2,2,2],返回 12.分析

2017-09-23 18:28:37 213

原创 LintCode 落单的数

1.描述给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例 给出 [1,2,2,1,3,4,3],返回 42.分析数组中除了落单数之外都是两个相同的数成对出现,因此排序后相同的数都是挨着的,从第一个数开始当找到一个数后面的数和他不同时该数即为落单数。3.代码class Solution {public:  

2017-09-23 17:15:48 266

原创 LintCode 关于递归问题的总结

1.分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。2.如果原问题可分割成k个子问题(1<k≤n),且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。3.由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。4.程序直接或间接调用自身的编程技巧称为递归算法 (Recursion)

2017-09-08 21:14:22 399

原创 LintCode 平面列表

1.描述给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。注意事项 如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。样例 给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。2.分析对给定列表中的元素依次进行

2017-09-08 19:14:58 623

原创 LintCode 平衡二叉树

1.描述给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。样例给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20

2017-09-07 17:26:19 371

原创 LintCode 关于排序问题的总结

排序的基本概念排序:给定一组记录的集合{r1, r2, ……, rn},其相应的关键码分别为{k1, k2, ……, kn},排序是将这些记录排列成顺序为{rs1, rs2, ……, rsn}的一个序列,使得相应的关键码满足ks1≤ks2≤……≤ksn(称为升序)或ks1≥ks2≥……≥ksn(称为降序)。正序:待排序序列中的记录已按关键码排好序。逆序(反序):待排序序列中

2017-06-18 18:13:53 423

原创 LintCode 合并区间

1.描述给出若干闭合区间,合并所有重叠的部分。2.分析首先对得到的若干闭合区间进行排序,由小到大依次判断是否有重叠的部分。两个区间若有重叠一定是一个区间的尾大于另一个区间的头才可以包括进去,因此新的区间由有小区间的头和两个区间中更大的尾组成。样例 给出的区间列表 => 合并后的区间列表:[ [ [1, 3],

2017-06-18 17:41:21 942

原创 LintCode 两数组的交Ⅱ

1.描述计算两个数组的交注意事项 每个元素出现次数得和在数组里一样答案可以以任意顺序给出样例 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].2.分析和两数组的交类似,不过这里不需要去掉重复元素的操作。3.代码class Solution {public:    /**

2017-06-18 17:39:02 290

原创 LintCode 两数组的交

1.描述返回两个数组的交注意事项 Each element in the result must be unique.The result can be in any order.样例 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].2.分析本来返回的应该是[2,2],但要求返回的交必须是唯一

2017-06-18 17:23:46 271

原创 LintCode 两数之和

1.描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以0 开头。注意事项 你可以假设只有一组答案。2.分析两个数组中的数相加为目标值,双重循环把所有元素遍历一遍即可。3.代码class Solut

2017-06-18 17:19:09 218

原创 LintCode 中位数

1.描述给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。2.分析首先对着干数组进行快速排序,之后返回中间值即可。3.代码class Solution {public:    /**     * @param nums: A list of integers.     * @r

2017-06-18 17:14:04 413

原创 LintCode 整数排序 II

1.描述给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。2.分析如题,一般排序为o(n)算法,若涉及到两组数据多重循环排序时甚至会到达o(n*2)的复杂度,这里采用的是o(n log n)快速排序,基本思想为选取一个元素使排在其前面的元素比它小,排在后面的元素比它大,达成一个基本有序的情况进而减小运算规模。3.代码

2017-06-18 17:01:32 429

原创 LintCode Convert BST to Greater Tree

1.描述Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST ischanged to the original key plus sum of all keys greater than the original key in BST.

2017-05-21 23:58:47 310

原创 LintCode 在二叉查找树中插入节点

1.描述给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft

2017-05-21 23:48:30 304

原创 LintCode 关于二叉树问题的总结

1.树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义是采用递归方法2.二叉树的遍历操作 树的遍历:从根结点出发,按照某种次序

2017-04-21 22:42:34 385

原创 LintCode 把排序数组转换为高度最小的二叉搜索树

1.描述给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。注意事项There may exist multiple valid solutions, return any of them.哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox

2017-04-21 22:27:14 432

原创 LintCode 子树

1.描述有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。哪家公司问你的这个题? Airbn

2017-04-21 22:16:36 311

原创 LintCode 二叉树的路径和

1.描述给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin M

2017-04-21 22:03:34 2197

原创 LintCode 二叉树的所有路径

1.描述给一棵二叉树,找出从根节点到叶子节点的所有路径。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia

2017-04-21 21:09:28 441

原创 LintCode 等价二叉树

1.描述检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Micro

2017-04-21 20:47:26 459

原创 LintCode 将二叉树拆成链表

1.描述将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco

2017-04-21 20:25:10 985

原创 LintCode 翻转二叉树

1.描述翻转一棵二叉树哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinteres

2017-04-21 20:24:03 348

原创 LintCode 克隆二叉树

1.描述深度复制一个二叉树。给定一个二叉树,返回一个他的克隆品 。哪家公司问你的这个题?AirbnbAlibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Ora

2017-04-21 20:12:05 354

原创 LintCode 二叉树的最小深度

1.描述给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft

2017-04-21 19:58:14 291

原创 LintCode 二叉树的最大深度

1.描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.2.分析题目描述中也给出了关于二叉树最大深度的注意点,最大深度为根节点到最远叶子节点的距离。因此首先找到根节点到叶子节点的距离,

2017-04-21 19:49:11 1279

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除