彩霞
littlestream9527
Hew out of the mountain of despair a stone of hope!
展开
-
LeetCode Permutation Sequence
这题还有点意思,第一次提交是求的所有排列然后排序选择第k个,超时了,仔细一想确实有更好的方法,以4为例,可以先分四个区间,1*** 有6个,2***有6个,3***有6个,4***有6个,这样就可以根据k判断所在的区间在某个区间定位,这样其他的区间就不用判断了。定位到其中一个区间后,还可以用同样的方法递推下去,比如开始k为15,在第三个区间,第一个元素选3,把3从原来的数组中删除,之后就是从第3个原创 2013-12-30 22:02:19 · 545 阅读 · 0 评论 -
LeetCode Partition List
关于链表的移动其实没什么,突然想到了能不能一段一段地移动呢,这样对于本身连在一起的就不用拆了在链接上了,应该是可以的,但一定是以一个为基准。下面的程序只是第一步移动了一段其他情况还是一个一个的移动,不能算高效。// LeetCode_PartitionList.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namesp原创 2014-02-22 21:40:33 · 716 阅读 · 0 评论 -
LeetCode Gray Code
好题,自己做出来的,花了一个多小时,不到两个小时,面试时估计可没有这么多时间。这样的题就是一点一点的找规律,然后转化为计算机算法。首先0先进入结果集,之后就是怎么交换的问题了,假n=3,刚开始为000,从左往右分别共交换1,2,4次,共7次正好7个数,而且两次交换的位置不能相同,所以交换的顺序为4241424(用次数来表示),4表示交换最后一位,2表示交换中间位,1表示交换第一位。能交换低位(右边原创 2014-02-26 18:55:33 · 599 阅读 · 0 评论 -
LeetCode Decode Ways
好题,弄出来真不容易呀,开始是没思路,后来大部分提交的都是不了解题意,题意本身考虑的情况就挺多,编译器还把不合理的输入也返回为0,要判断的更多了。最开始的思路是递归,递归公式也写出来了,后来时间限制,改动态规划,提交了十多次,终于AC了。自己做出的,不能说学会了编程,但至少这题是用计算机思想解决的,真是锻炼了。动态规划是通了,递归如果不考虑时间的问题,也要设置一个全局变量来判断是否输入合理,或者用原创 2014-02-26 22:26:39 · 496 阅读 · 0 评论 -
LeetCode Scramble String
好题呀,太长时间不思考了,想到了分治方法,没坚持下去,也就没想出来,其实不难,下面是递归的方案:bool isScramble(string s1, string s2) { int lens1,lens2; lens1 = s1.length(); lens2 = s2.length(); if(lens1!=lens2) return false; if(lens1==0)原创 2014-02-26 15:51:27 · 607 阅读 · 0 评论 -
LeetCode Unique Binary Search Trees II
题记:我只看见一棵接一棵的树,却没看见整个森林。这题搞得蒙呀,刚开没看题意,以为和 按顺序入栈出栈的种类 一样呢,结果题意是:搜索二叉树,中序是123,求先序的可能。想了半天这也不能转化为进栈出栈的问题,有一种解法是求所有的排列,然后对任意排列作为先序判断是够能和按序的中序组成二叉树,再把符合条件的组合构建二叉树,确实很麻烦。再看看,肯定是有更直接的求法,自己没想出来,贴的别人想法。如此干练精原创 2014-03-05 11:13:20 · 492 阅读 · 0 评论 -
LeetCode Unique Binary Search Trees
卡特兰数,这题直接答1/(n+1)C(n,2n)最简单,而且时间也是最快的;但是怎么求出来的呢?下面的一道题是具体怎么构造二叉树,二叉树得不断开辟空间,进栈出栈的折腾还得删除空间(递归时要恢复现场);所以我打算从1,2,3,n的入栈顺序,找出所有可能的出栈顺序,这个结果的个数也就是该题的结果。就是这个程序,没想到自己写了一天也没写出来,下面是我的错误的程序:void numPushPop(in原创 2014-03-04 21:19:49 · 459 阅读 · 0 评论 -
LeetCode Validate Binary Search Tree
天若有情天亦老,人间正道是沧桑。输了,在那没考虑全面甚至没去考虑全面而提交的一刻就输了,再回首,正是那年似曾相识的题目,躲在旮旯深处!错了之后一想,记忆清晰呀,微策略面试题,在家里面试的,做之前却没想起来。所以还是原样子错过了。这题就是这么一个陷阱,明白了绕过来就行了。bool isLeftRight(TreeNode *root,int &Biggest,int &Smallest) {原创 2014-03-06 21:55:13 · 537 阅读 · 0 评论 -
LeetCode Populating Next Right Pointers in Each Node II
有意思,看了题意,我只想说一句:上一题的方法依然好使,我只把64改成640就提交通过了。我却迷惑了,任意的二叉树640层完全不够用呀,1000层,10000层也有可能呀,难道还有什么更好的方法吗?TreeLinkNode* layers[640];void preOrderLayer(TreeLinkNode *root,int layer)//,TreeLinkNode *&layers原创 2014-03-13 20:59:31 · 563 阅读 · 0 评论 -
LeetCode Distinct Subsequences
这题有有意思,比前面的题好多了,刚开始时理解题意有误,就是没明白什么意思,看了别人的博客才明白。之后就是方法的问题,递归,动态规划,然后是动态规划的优化,不优化的动态规划不通过。所谓的优化,其实就是用一维数组代替DP的二维数组,dp式子dp[i][j]=dp[i-1][j-1]+dp[i-1][j](S[i]==T[j])时;dp[i][j]=dp[i-1][j](S[i]!=T[j])时;只要是原创 2014-03-13 20:14:19 · 568 阅读 · 0 评论 -
LeetCode Best Time to Buy and Sell Stock III
这是好题,所谓的好题就是必须用优化的方法解,否则通不过。只能交易两次股票,本来想到第二题中的方法,找每个最小值最大值的差值,找两个最大的,仔细分析发现,这样的方法是错的,比如5,9,6,12,按上面的方法回提取两个最大差值,5和9,6和12,如果后面还有数,假设还是5,9,6,12,那么最大的利润值应该是两次5和12,也就是说不能选择每临近的最大值最小值的差值。接下来想到了二分法,从某一点划分开,原创 2014-03-16 15:23:37 · 724 阅读 · 0 评论 -
LeetCode Maximal Rectangle
隔了一个月又回来了。这题之前做过,思路就是根据上一题中求直方图中的最大矩形面积来求全部包含1的最大矩形面积,就是多加了两层循环。int largestRectangleArea3(vector &height) { stack s; int len=height.size(),maxx=0; for(int i=0;i<len;++i) { if(s.empty())s.push(原创 2014-02-21 21:36:11 · 984 阅读 · 0 评论 -
LeetCode Largest Rectangle in Histogram
记得做过一道和这差不多的题,像是什么桶里放水之类。这题第一次的思维是最普通的方法,首先对所有高度排序,然后分别判断对应于某一高度能获得的最大宽度,他们之积就是面积,这样找所有的高度,对于有很多重复数字的情况下这种做法应该是高效的,但是一般情况整体的复杂度为O(N*N),提交的结果是超时,想了想,应该有更好地方法,但是怎么也没想到能达到O(N)时间复杂度的,动态规划dp[i][j]也得N方的时间复杂原创 2014-01-17 21:28:39 · 589 阅读 · 1 评论 -
LeetCode Valid Number
终于AC啦,刚开始把题想简单了,这题最关键的是要考虑周全所有的可能,最重要的程序结构,这题把程序的逻辑表现的淋漓尽致。是不是提交比例最低的了,有意思,好题。bool isNumber(const char *s) { if(s==NULL||*s==0) return false; bool flag = false;// 表示.钱是不是有数字 while(*s==' ') s+原创 2014-01-05 12:09:13 · 573 阅读 · 0 评论 -
LeetCode First Missing Positive
这题不是自己做的,也没想出来,估计要我自己想得想个一年半载的,也够呛。看了别人的做法真是巧妙呀。不管别的,把能放得放到应该放的位置上,当然之前不能覆盖元素,所以要保存原来的值,然后还要对保存的值进行同样处理,看看它能放到哪,因为元素的值都是正整数,所以可以直接作为索引了,这样才能保证O(n)的时间复杂度。因为每次放到正确的位置的值下次就不用放了,所以不会重复无用的计算,这样既是for里有while原创 2013-12-20 20:30:45 · 475 阅读 · 0 评论 -
LeetCode Sudoku Solver
非递归方法预处理 数独 以提高速度原创 2013-12-18 21:58:59 · 1011 阅读 · 0 评论 -
LeetCode Substring with Concatenation of All Words
一看这道题就知道不是一个简单的题,不想一下子就放弃,就写了写,第一个的想法是找每个字符串出现的位置,然后判断位置是否连续(既包含所有的字符串),但是没有用map,也没有记录每个单词出现的次数,结构之混乱,思维之复杂,弄了好久调通了,时间限制。烂代码贴上也无妨,不要学就是了。vector findSubstring(string S, vector &L) { int lenL = L.siz原创 2013-12-15 21:59:32 · 535 阅读 · 0 评论 -
LeetCode Trapping Rain Water
accept?真是一阵惊喜,没想到这方法能通过,而且反应了有一会儿。先回顾一下前面的相关的题目http://oj.leetcode.com/problems/container-with-most-water/ http://blog.csdn.net/littlestream9527/article/details/17174075 这题当然不一样了,首先每个元素本身都要占据面积的,其原创 2013-12-20 22:11:47 · 525 阅读 · 0 评论 -
LeetCode Regular Expression Matching
这题没那么简单,贪心不行。自己写的递归,改了几次终于通过。bool isMatch(const char *s, const char *p){ if(s==NULL||p==NULL) return false; if(*s==0&&*p==0) return true; else { if(*s==0&&*p!=0) { const char *q=p; wh原创 2013-12-05 22:30:28 · 609 阅读 · 0 评论 -
LeetcCode Sort Colors
这题刚开始看就是提示的那个思路,找出每个出现的次数,然后重新赋值;那个遍历一次的方法,因为要不断的交换,判断,感觉速度好不到哪去(提交的结果运行时间确实是一样的),但是还得写,这一写就把自己写蒙了,一个小时没写出来,手感差到什么程度了,用科比的话说就是“感觉我自己坐在船里,甚至都不知道怎么把球扔进大海”。真没那么难,是我自己马虎的太严重了。惭愧!两个方法敬上:也别说两个小时白折腾了,至少知道一原创 2014-01-08 22:08:52 · 759 阅读 · 0 评论 -
LeetCode Jump Game II
第一次 递归int jump_res(int *arr,int n,int cur){ if (cur>=n-1) return 0; int minv = Inf; for (int i=1;i<=arr[cur];i++) { int tempv = 1+jump_res(arr,n,cur+i); if (minv>tempv) { minv = temp原创 2013-12-26 20:27:27 · 1047 阅读 · 2 评论 -
LeetCode Wildcard Matching
前面有一道http://oj.leetcode.com/problems/regular-expression-matching/ 和这题特别像的。首先我是用回溯法,肯定时间是不够的,不知道有没有错误,leetCode的编译器错误也说是超时,如下:bool isMatch(const char *s, const char *p) { if (*p==0) { return *s=原创 2013-12-26 16:51:23 · 653 阅读 · 0 评论 -
LeetCode Minimum Window Substring
http://www.cnblogs.com/lichen782/p/leetcode_minimum_window_substring_3.html原创 2014-01-10 22:08:55 · 1164 阅读 · 0 评论 -
LeetCode Word Ladder
终于憋出来了,虽说还不是特别好。没想到一点点的改动竟然是过于不过的差别就是这句:if(temp>1) break;。这题最令我为难的是我不能用unordered_set这个数据结构,原因简单的很,我用的是XP,VS是2008版的,所以操作都是基于vector的,首先就是复制到vector,这题就是找两点之间的最短距离呗,先是试了佛洛依德,后来迪杰斯克拉,后来广度优先,都没通过(要么时间要么空间),原创 2014-03-21 22:16:05 · 740 阅读 · 0 评论