- 博客(23)
- 收藏
- 关注
原创 leetCode_Number of Digit One
题意:给一个数,返回小于这个数的正整数中含1的个数解法:如果这个数小于等于0,返回0。 如果这个数大于0,我们就得按照每个位来判断。比如数字1159,个位上为1的数就有0001~1151共116个。那么如何判断呢?要根据每位的数字来定,详情见代码吧。先把去掉这个位上的数的所有数都存在一起。代码如下:int countDigitOne(int n){ vec
2016-09-30 17:33:35 311
原创 leetCode_发现两排好序数组的中位数
double findKth(int a[], int m, int b[], int n, int k) { //always assume that m is equal or smaller than n if (m > n) return findKth(b, n, a, m, k); if (m == 0)
2016-09-23 10:16:40 412
原创 leetCode_Word BreakII
题意:给定一个字符串和一个单词序列,判断该字符串能不能分成若干个子串,且每个子串是单词序列的词。给出所有分法。解法:分为两个步骤:首先判断是否能分,然后再给出所有的分法。判断是否能分:从后向前扫描,如果从某一位置到字符串的结尾在单词序列里,或者某一序列在单词序列并且这一序列的下一个字母已经被验证能分,则isOk[i]=true,只要判断isOk[0]是否为true就可以。给出所有分法:
2016-09-22 14:39:26 269
原创 【leetCode】Text Justification
题意:给定一组单词序列和一个最大的单词长度,要求按行显示单词,单词之间有空格,每行的最大长度不能超过给定值。对于非末行,空格的长度均匀分配,对于末行,左对齐显示,即单词之间只能有一个空格,剩余的空格在最后一个单词之后。思路:没什么特别的,纯模拟题。代码:vector fullJustify(vector& words, int maxWidth){ vector length
2016-09-21 11:32:56 250
转载 Copy List with Random Pointer -- LeetCode
http://blog.csdn.net/linhuanmars/article/details/22463599Random的思路:思路一:我的思路,用Vector存下所有节点,一个一个比对思路二:用map存下位置相同的结点,newNode->random=map.get(OldNode->random)思路三:不用辅助空间的方法,见图。
2016-09-20 15:02:09 214
原创 leetCode_Longest Consecutive Sequence
题意:在一串数组中,找出最长的连续序列(元素间的相对位置可以变化)解法:这是一题变形的DFS。先用map把所有的数字(key)和是否出现(value)存起来,然后对于每一个元素,递增找出出现的元素,再递减找出出现的元素,每一次找到某个元素,让它的key为0既可。代码:class Solution {public: int longestConsecutive(vector&
2016-09-20 10:11:35 342
原创 python之from...import...和import
python是模块化的语言,假设某工程的组织如下liuhuan(python包)datatime(其中这个文件里有一个datatime的类和一个getB方法)Studentabcd(python文件)如果abcd要想调用datatime类 有两种方法:from liuhuan.datatime import datatime as bs=b()print s.get
2016-09-19 17:13:02 1852
原创 leetCode之非递归中序遍历、后序遍历二叉树
核心思想其实很简单,用两个栈,一个栈用来存放结点,另一栈存放整数,分0、1、2三个值。因为遍历核心就是3句话:遍历左子树,遍历右子树,操作(读值)。对于中序遍历,0代表要遍历左子树,1代表操作(读值),2代表遍历右子树;对于后续遍历,0代表遍历左子树,1代表遍历右子树,2代表操作(读值)。中序遍历的代码如下:/** * Definition for a binary tree node.
2016-09-19 11:34:07 417
原创 leetCode_Lowest Common Ancestor of a Binary Tree
题意:找出一个二叉树两个节点的公共祖先方法一:给两个节点编号,0表示左子树,1表示右子树。编完号之后找出最长前缀,从根往节点找即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
2016-09-17 20:24:01 264
原创 【leetCode】Maximum Gap
题意:给定一个数组,返回排序之后的相邻元素差的最大值。在o(n)的时间和空间复杂度完成思路:二进制的拓扑排序。两个桶,一个是0,一个是1,从低位开始排,32次(一个月前给小孩子讲过)代码如下: int maximumGap(vector& nums) { vector zeroes; vector ones; int i,j,k,s
2016-09-17 14:33:53 273
原创 leetCode_Candy
题意:N位小朋友站成一行,每个小朋友有一个分值。你给这N位小朋友发糖果,必须满足以下要求:1、每个小朋友至少有一个糖果2、分值高的比邻居分值低的糖果数多。求最少糖果数。我的思路:把这一列小朋友分成多个邻居分值不一样的段。比如(1,2,3,3)分成(1,2,3)和(3)两段。然后再找出每个段单调的终点,如果是单调上升就从第一个点一次往后增1,如果是单调下降就从最后一个点往前增1,先上升再
2016-09-16 20:12:07 302
原创 leetCode_Palindrome Partitioning II
题意:给定一个字符串,要把他这个字符串分成若干个回文子串。问数目最小是多少。题解:动态规划。用ans[j]表示以j结尾的回文子串数量,则如果s(0,j)是回文串,则ans[j]=1,否则 ans[j]=min(ans[i-1])+1,并且s(i,j)是回文串。代码:int minCut(string s){ int i,j,k,l=s.length(),left,right;
2016-09-14 10:47:11 276
原创 leetCode_First Missing Positive
题意:给定一个数组,找出未出现最小的正数思路:先找到正数中的最小值。如果大于1,则直接返回1。 否则,我们知道1应该放在a[0],2应该放在a[1],依次类推。所以遍历数组,当某个数不在该有的位置上时,交换到应在的位置上。要注意一趟不能保证完成,如(3,4,-1,1),一趟交换的结果是(-1,1,3,4),必须得多次才行。代码如下:(思路是参考网上的。。。)
2016-09-13 14:17:37 277
原创 leetCode_Binary Tree Maximum Path Sum
原题:给定一棵二叉树,每个节点有一个数字代表路径值。找出最长路径。(路径不必穿过树根)解法:先找以各个节点作为子树的最长路径(路径必须经过根)。要么就是根到左子树的某个节点,要么就是根到右子树的某个节点,要么就是穿过根(从左到右),要么就是根节点本身。用ans维护最长路径,用findPath表示不穿过根的路径最大值(向上返回用)。代码如下:/** * Definition for a b
2016-09-13 14:11:35 419
原创 leetCode_Recover Binary Search Tree
题意:给定一个二叉搜索树,其中有两个元素的顺序被对调了,请找出这两个元素思路:用pre节点代表前一个被遍历的节点,root节点代表当前被遍历的节点,如果pre->val>root->val则顺序有问题。如果出现1次,则把这两个元素的值交换;如果出现两次,则把第一次的pre和第二次的root值交换。其他到没啥,主要想清楚pre节点的记录方法。代码:/** * Definition
2016-09-09 15:34:22 281
原创 leetCode_Minimum Window Substring
题意:给定字符串s和t,返回s中包含t所有字符的长度最短的子串例子:如s="ADOBECODEBANC",t="ABC",返回"BANC";解法:用letters记录t中每个字符的出现个数,用一个队列记录s中的那些在t出现的下标,用cur记录s中t字符串里的字符出现个数,用count表示满足了t中的多少个字符。也就是说,若s[i]在t出现,并且cur[s[i]]string minWi
2016-09-08 09:54:20 339
原创 leetCode_Substring with Concatenation of All Words
题意:给定一个字符串s和一个组等长的单词序列t,返回子串的开始坐标,子串为单词序列中所有单词的连接(只出现一次),顺序不重要。例如:s="barfoothefoobarman" words:["foo","bar"] 返回的字典序列[0,9]思路:非常简单,用map记录单词序列出现的次数,然后从每个index开始,看看t.size()*t[0].length()这个区间内是否把t所有的单词
2016-09-07 12:52:27 228
原创 leetCode_Valid Number
题意:给定一个字符串,判断这个字符串是不是合法的数字解法:很明显用状态图。值得注意的是:3.、.7、0003都算合法,科学计数法之后只能有整数。上状态图:代码如下:bool isNumber(string s){ int i,state=0,length=s.length()-1; for(; length>=0&&s[length]==' '; length
2016-09-06 11:40:15 238
原创 leetCode_Longest Valid Parentheses
题意:给定一段由“(”和“)”组成的序列,给出最长括号匹配序列的长度。解答:动态规划+分类讨论,用ans[i]表示以i开始的最长括号匹配序列的长度。分以下几种情况。情况1:如果s[i]==‘)’,显然是0,不用讨论。情况2:如果s[i]=='(',分如下几种情况: 如果s[i+1]==')',则ans[i]=2; 如果s[i+1]=='('并且s[i+1
2016-09-06 10:00:24 287
原创 leetCode_Distinct Subsequences
题意:给定两个字符串s和t,问只通过删除字符的方法将s变为t有多少种方法解法:本题是典型的动态规划,给出两种解法(第一种是我自己的比较烦琐,第二种是网上的思路比较清楚)。就算是思路较烦琐,也是我想的,我觉得这是我独立做出了的第一道dp题,开心~。解法一:用ans[i][j]表示以s[i]结尾能到t[j]有多少种方法。则对于ans[i][0],只要把s里面的所有等于t[0]的下标设置成1即可
2016-09-05 10:38:48 270
原创 leetCode_Trapping Rain Water
题意:给定n个非负数代表每个柱子的高度,宽度均为1。问能在空间里放多少水。解法:设定previous与next,然后移动next,找到第一个比prevoius高的或者比prevoius低的柱子当中最高的。然后两者较低的乘以宽度-所有柱子的高度之和即为prevoius,next之间的蓄水量。然后让prevoius=next,依次循环。挺虐的,做了小半天才AC。代码:int trap(ve
2016-09-03 09:30:48 281
原创 leetCode_分组反转链表
题意:给一个链表及一个数k,每k个节点一组反转链表。例如:链表1->2->3->4->5以及k=2,返回的链表为2->1->4->3->5。解法:反转链表比较熟(可是今天还写错过1次)先确定start和end,previous先定位为start,end定位为previous->next,然后while(previous!=end) { start->next=start->next->next
2016-09-01 10:00:50 670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人