自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 lintcode392-打劫房屋

题目描述:唯一约束是不能连续拿两个房间的钱,只能是隔一个或者更多。此题可以利用动态规划的想法,利用一个数组arr, arr[i]表示i房间及其以前的可以拿到的最多金钱。    此时针对第i个房间,就有两种情况:1)拿第i个房间的钱,那么就不能拿i-1房间,拿到的钱就是 arr[i-2] + A[i]                                                  ...

2018-05-30 13:30:16 189

原创 lintcode540-左旋右旋迭代器

题目描述:简单暴力的求解方法:在生成该迭代器的构造函数中,就将传入的两个vector按照要求的顺序放入一个vector中,剩下的两个方法就是判断下标是否到达数组尾部,返回当前下标的数组元素。代码:class ZigzagIterator {public: /* * @param v1: A 1d vector * @param v2: A 1d vector */...

2018-05-30 12:27:16 368

原创 lintcode448-Inorder Successor in BST

题目描述:题目意思在BST中找到中序遍历中某一个节点的后继节点。根据BST的特点,BST的中序遍历是一个有序序列。在此序列中找某一节点的后继,一种普通的方法就是中序遍历该BST,将结果存在数组中,二分查找目标节点的值,然后后一个就是该节点的后继,如果目标节点是数组最后一个元素,则该节点没有后继,返回NULL。本题想要得到O(h)的复杂度,h为树高。即从树根节点遍历到叶子节点的过程。思路:cur当前...

2018-05-29 18:38:15 325

原创 list容器的erase函数和remove函数

由于list容器的特殊实现,所以list容器实现了自己的erase函数和remove函数。erase函数的函数声明:可以看到函数的参数是由迭代器给出的。由迭代器给出删除的位置或者区间。    1) Removes from the list container either a single element (position) or a range of elements ([first,las...

2018-05-29 10:34:18 2597 1

原创 lintcode202-线段树的查询

题目描述:思路:在查询过程中,可能会遇到三种情况,目标区间在本区间中点的左边; 在本区间中点的右边; 跨越本区间的中点。在左边的情况:从当前节点移动到左孩子节点。在右边的情况:从当前节点移动到右孩子节点。在中间的情况:从中间分开,两边都要考虑,取其大者。递归进行。代码:int query(SegmentTreeNode * root, int start, int end) { /...

2018-05-28 21:30:31 174

原创 lintcode203-线段树的修改

题目描述:思路:线段树的叶子节点就是数组中每一个位置的元素值,所以先找到要修改的位置,即先到达要修改的叶子节点,修改该节点的max值,然后再从叶子节点回到根节点,返回过程中,比较节点的左右孩子的max值,取两者较大者作为本节点的max值,这样无论value值和max值的大小关系,都作为一种情况考虑。代码:void modify(SegmentTreeNode * root, int index, ...

2018-05-28 21:25:43 145

原创 lintcode363-接雨水

题目描述:要求能接水的数量。每个位置能不能接水,能接多少水,取决于该位置左右两边的最高高度中的较小者。如果该位置就是从左边开始的最高高度,则该位置不能接水,如果该位置不是左右两边的最高高度,则该位置能接的水量就是左右最高高度中的较小者减去该位置的高度。最左边和最右边不管是不是最高高度,都不能接水。为能快速得到某一位置左边的最高高度和右边的最高高度,采用两个数组left和right。left[i] ...

2018-05-17 19:50:34 217

原创 lintcode370-将表达式转换为逆波兰表达式

题目描述:将表达式处理成逆波兰表达式,主要处理的就是优先级问题,将括号去掉,用操作符的先后顺序表示运算顺序。逆波兰表达式中操作数的顺序和原表达式中操作数的顺序是一样的,也就是说在原表达式遍历过程中,如果判断是操作数,直接放入结果中。重点是操作符的放入顺序,这个是决定运算顺序的关键。操作符一共有 ( + - * / ) 六种, 遍历到的操作符和当前栈顶操作符进行比较。当遍历到的操作符比栈顶的操作符优...

2018-05-16 20:57:51 243

原创 lintcode424-逆波兰表达式求值

题目描述:给出已有的逆波兰表达式,根据运算规则计算是比较简单的,遇到的是操作数,string转换成int,压入到栈中,遇到的是操作符时,从栈中弹出两个操作数,进行计算,再把计算结果压入到栈中,遍历完一遍时,栈中的值就是整个表达式的结果。不需要考虑优先级问题以及括号问题。此处需要注意的一点是第一次从栈中弹出的是第二个操作数,第二次弹出的才是第一个操作数。这个会对减法和除法产生影响。代码:int ev...

2018-05-16 19:25:03 138

原创 lintcode189-丢失的第一个正整数

题目描述:如果不做空间的要求,可以利用哈希的思想,元素i放在下标为i的位置。然后遍历辅助空间,第一个没有赋值的就是答案。要求常数级别的空间,排序就只能在原数组上进行。不是抹掉原来位置的元素,而是交换,使得下标为i的位置元素为i+1(正整数从1开始). 如果数组元素的范围都是数组长度范围内,交换完成以后,每一个元素都被交换到正确的位置。如果有大于数组长度的元素,那1~数组长度范围内肯定有空缺,交换完...

2018-05-15 18:44:51 234

原创 lintcode137-克隆图

题目描述:本题重点在于避免重复生成节点,避免在构造节点的相邻节点时插入重复节点。为避免超时问题,在遍历图的过程中,就生成新节点,并构造节点的相邻节点。代码:UndirectedGraphNode* cloneGraph(UndirectedGraphNode* node) { // write your code here if(node == NULL) ...

2018-05-15 17:40:01 190

原创 lintcode176-图中两个点之间的路线

题目描述:对于本题,本能想到深度优先搜索。递归实现, 一直走到当前路线最后一个节点。当递归回到s节点,并且没有找到t节点,才能认为是不存在路线。图中可能有不同的节点指向同一个节点,这样就需要一个数据结构来保存每一个节点的访问情况,只访问没有访问过的节点,这样才不会超时。class Solution {public: /* * @param graph: A list of Di...

2018-05-15 15:49:21 243

原创 lintcode187-加油站

题目描述:解题思路:往上有好多种思路,在这里写上我认为比较好理解的。            如果当前i,gas[i] - cost[i] < 0, 此加油站是不能作为起点的。            如果某一起点start,在遍历到加油站end时,出现汽车油量cur_gas<0,则 start不能作为起点。这种情况下,将start往前走一个,看能不能到达end,这样就可以在本次过程中,用...

2018-05-15 11:05:51 191

原创 lintcode1399-拿硬币

题目描述:本题是只能从最左边或者右边拿k次,可以进行k次遍历,开始k次都从最左边拿,然后是从左边拿k-1个,从右边拿1个......一直到全部K个都是从右边拿,在此过程中,利用一个变量保存最大和的情况。最后退出返回。代码:int takeCoins(vector<int> &list, int k) { // Write your code here if(li...

2018-05-15 10:05:05 537

原创 lintcode1396-集合合并

题目描述:解题思路:构建一个key-value对,key为数组元素,value表示该元素在第几个集合中;                将所有的集合中的元素都拷贝到一个数组中,                根据元素排序,使得相同的元素都在一起,然后更改下标。                循环检测,直到没有可以更改的元素为止。                统计此时元素有几个下标,就是剩下了几个...

2018-05-15 09:03:55 195

转载 lintcode-二叉树所有路径

转载博客:https://blog.csdn.net/nawuyao/article/details/51087709问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径 样例 给出下面这棵二叉树:1 / \ 2 3 \ 5 所有根到叶子的路径为:[ “1->2->5”, “1->3” ]分析:一般二叉树的问题用递归解决比较简洁。在库文件str...

2018-05-11 21:06:47 128

原创 lintcode-453 将二叉树拆成链表

题目描述:要求不使用额外空间,并且将二叉树变成链表,首先想到的就是递归的遍历方式。然而在递归过程中,需要有一个不因递归层数而变化的变量来记录现在已经构造完成的链表的尾部,并不断将遍历过程中的节点加入到链表尾部。还有一个问题: 用树节点的右孩子指针当做链表的next指针。这就需要保存节点的右孩子,否则就会丢失,递归回到本层时,通过保存右孩子的临时变量来继续进行遍历。而不是通过本层节点的right指针...

2018-05-11 20:42:56 228

空空如也

空空如也

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

TA关注的人

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