自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

House

退役acmer,现在FDU研究数据库、分布式、时间序列数据挖掘等相关内容。(欢迎交流,题材不限…尺度不限…)

  • 博客(30)
  • 收藏
  • 关注

原创 LeetCode 30 Substring with Concatenation of All Words

题意:给出字符串s和许多等长(len)单词w,找出所有s中的满足子串为w中所有单词的一种组合的位置。思路:因为w中的单词要满足的是组合而不是排列,因此用“区间[L,R]中包含单词的计数”来维护比较合适。一是满足了组合对顺序的不要求,二是方便处理重复的单词。首先可以统计一下,w中各种单词个数。如果s的长度为size(w) * len的子串单词计数与w相同,则找到一个答案。

2017-01-30 17:21:02 237

原创 LeetCode 29 Divide Two Integers

题意:不用*/和%实现除法计算,返回int,如果超过int最大值则返回最大值。思路:一开始想到了高精度模拟,但还是要用*/%。后来才想到位运算这回事。基本思想都是试商法,只不过用位运算的时候,试的是答案的二进制位。符号通过被除数和除数异或来计算。注意细节,除数为0。还有数据类型要用long long,要不然INT32_MIN没有对应的int正数!!代码:

2017-01-30 16:22:32 249

原创 LeetCode 28 Implement strStr()

题意:给出字符串s和p,找出p在s中第一次出现的位置。如果p没出现过,则输出-1。思路:这是一个kmp裸题,学习kmp建议 http://blog.csdn.net/v_july_v/article/details/7041827 。相比next版本,nextval版本更好。当然C++中string还提供的find功能可以偷懒。代码:/** * kmp 版

2017-01-30 16:10:34 298

原创 LeetCode 27 Remove Element

题意:删除数组中所有的val,返回删除后的长度。注意本题要求改变数组,就是把没没被删除的元素往前移,且顺序不变。思路:这次就不能unique了,要求顺序。但是2个指针的方法仍有效,一个指针遍历数组,一个表示答案长度,如果遇到一个数字不是val,就把它放进答案。代码:class Solution {public: int removeElement(ve

2017-01-30 16:03:44 264

原创 LeetCode 26 Remove Duplicates from Sorted Array

题意:给有序数组去掉重复元素。思路:这不就是unique……你连排序都做好了……如果不用这个函数,可以选择用两个指针,一个遍历数组,一个表示答案数组长度,每次遇到不同的元素就放进答案中。代码:class Solution {public: int removeDuplicates(vector &nums) { return uni

2017-01-30 15:58:38 257

原创 LeetCode 25 Reverse Nodes in k-Group

题意:链表中每k个元素做一次反转。思路:其实这题与 http://blog.csdn.net/houserabbit/article/details/54783052 是一样的,k的大小并不影响做法,只不过从3个指针变成k+1个指针而已。代码:/** * Definition for singly-linked list. * struct ListNode

2017-01-30 15:48:25 229

原创 LeetCode 24 Swap Nodes in Pairs

题意:链表中的相邻2个元素翻转一下。思路:用3个指针,其中两个指向要反转的元素f1和f2,还有一个指向答案的最后一个元素ans。不断做f1.next = f2.next;    f2.next = f1;    ans.next = f2;    ans = f1;代码:/** * Definition for singly-linked list. *

2017-01-30 15:42:36 261

原创 LeetCode 23 Merge k Sorted Lists

题意:将k个已经有序的链表排序成1个。思路:可以不断将待排序的链表分成两份,然后归并排序,复杂度为O(nlogn)。我的做法更简单些,直接先放在一个容器里,然后sort。时间复杂度O(n+nlogn),空间复杂度O(n)。代码:/** * Definition for singly-linked list. * struct ListNode { *

2017-01-30 15:28:47 258

原创 LeetCode 22 Generate Parentheses

题意:用n组小括号,生成所有满足括号匹配的序列。思路:我用了比较粗暴的方式,用set不断迭代答案,每次迭代使得括号组数+1直到n为止。还有一种方法是dfs构造,因为长度已经确定,所以每个位置要么放(要么放),利用前缀和维护括号匹配即可。代码:class Solution {public: vector generateParenthesis(in

2017-01-30 15:22:39 248

原创 LeetCode 21 Merge Two Sorted Lists

题意:排序两个已经有序的链表,空间复杂度O(1)。思路:很基本的题,经典的2个指针遍历链表的思路,将小的那个元素接到答案的最后一个元素之后,直到一条链遍历完毕。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex

2017-01-30 15:15:56 224

原创 LeetCode 20 Valid Parentheses

题意:判断字符串s是否满足括号匹配思路:栈代码://// Created by 房籽呈 on 2017/1/24.//class Solution {public: bool isValid(string s) { int const n = s.size(); if (n & 1) {

2017-01-24 15:05:31 330

原创 LeetCode 19 Remove Nth Node From End of List

题意:删掉链表中倒数第n个元素思路:我用了2pass方法,即先扫一遍计长度,再扫一遍找元素删除。1pass方法应该更好,即维护两个指针,一个指针比另一个指针多走n+1步,删除落后的指针的下一个元素。代码:/** * Definition for singly-linked list. * struct ListNode { * int val;

2017-01-24 14:58:18 220

原创 LeetCode 18 4Sum

题意:给出数组s和目标target,输出s中4个元素相加和为target的所有不同方案。思路:又是x sum问题,详见我的题解:http://blog.csdn.net/houserabbit/article/details/54707475这题要注意的是去掉重复的方案,而且本题时间卡常数,代码要写的快一点。代码:class Solution {publi

2017-01-24 14:49:05 227

原创 LeetCode 17 Letter Combinations of a Phone Number

题意:给出数字串s,输出按照9键键盘输入s时可能的所有字符串。思路:没思路……直接模拟过程就得了……写switch好看点……吧……代码:class Solution {public: vector letterCombinations(string digits) { vector res; if(!digits.s

2017-01-24 14:37:22 223

原创 LeetCode 16 3Sum Closest

题意:给出数组s和目标target,要求从中选出3个数字,使其相加的和最接近target。思路:x sum系列的题目,在这里做一个总结。最经典的情况为2 sum问题,即给出s和target找出s[i] + s[j] = target。可以使用枚举s[i]判断target - s[i]是否在s中出现且与s[i]不同的O(nlogn)方法,用map或排序后二分查找的方式均可

2017-01-24 14:25:15 313

原创 LeetCode 15 3Sum

题意:求不重复的使得x + y + z = 0的(x, y, z)组合。思路:为了防止重复可以按x 我的代码好慢…不知道是不是用了long long的缘故…求快速的代码??代码://// Created by house on 1/9/17.//class Solution {public: vector > threeSum(vector

2017-01-09 15:50:43 237

原创 LeetCode 14 Longest Common Prefix

题意:最长公共前缀思路:一个字符一个字符的考虑即可,但是写代码时候要小心,也许当前string已经不够长了,或者它一个字符串都没给你…官方题解很成功的把简单题想得巨烦,建议看着玩玩即可,思考下大数据下算法的扩展性。代码://// Created by house on 1/9/17.//class Solution {public: str

2017-01-09 15:43:53 245

原创 LeetCode 13 Roman to Integer

题意:把罗马数字变成数字。思路:简单模拟。我用了个map有点蠢,其实写个switch更好点吧。代码://// Created by house on 1/9/17.//class Solution {public: int romanToInt(string s) { map toint; toint['I']

2017-01-09 15:36:43 230

原创 LeetCode 12 Integer to Roman

题意:把数字变成罗马数字。思路:简单模拟。为了把代码写漂亮点还是可以用用函数什么的。代码://// Created by house on 1/9/17.//class Solution {public: string intToRoman(int num) { stringstream ss; int thou

2017-01-09 15:33:09 222

原创 LeetCode 11 Container With Most Water

题意:数组A中第i个元素A[i]表示一块两端在(i,0)和(i,A[i])的板,从中选出2块板,使得它们与x轴围成的桶装水体积最大。思路:因为装水体积只和矮的板有关,因此我们从高到低的考虑板子,这样当前考虑的板子A[i]就是装水的高度。高度确定时,让桶尽量的宽。可以用l和r表示已经考虑过的板子的x坐标的最小和最大值。若l r,则桶宽i - l。代码:/

2017-01-09 15:25:48 262

原创 LeetCode 10 Regular Expression Matching

题意:给出一个字符串s和一个模式串p,p中"."表示任意单个字符,"*"表示"*"前面的字符个数为任意个,判断p能否表示s。思路:我使用了dfs方式,先把p解析成结构的列表L,即某个字符允许出现几次。然后按顺序将L与s做验证,对"*"的处理方法是简单枚举个数。最后判断L与s是否同时结束。注意,同时结束的意思是在s结束时L也结束或者L剩下的元素中count都是"*"。求更

2017-01-09 14:51:19 295

原创 LeetCode 9 Palindrome Number

题意:判断一个数字是否是回文数。思路:负数肯定不是,0是。正数我用两个标记表示对称的高位和低位,判断即可。我的解法速度挺慢的,求快速解决方式??代码://// Created by house on 1/9/17.//class Solution {public: bool isPalindrome(int x) { i

2017-01-09 14:40:19 187

原创 LeetCode 8 String to Integer (atoi)

题意:输入一个String,将它变成int输出。思路:如果说LeetCode 7有点无聊,那么这道题就是无理取闹…输入的String可能不是个数字…建议别在这题上浪费时间,直接点“spoilers alert... click to show requirements for atoi.”看看提示吧。这题的sb之处在于:开头可能有空格(这竟然是合法输入,要忽略开头空

2017-01-09 14:33:11 191

原创 LeetCode 7 Reverse Integer

题意:给一个数字,把它反过来。思路:如果不点“click to show spoilers.”我不信任何人可以一次AC,这是一道稍微有点细节但很无聊的题。细节在,int反过来的数字可能超过int范围,所以做翻转的时候记得用long long。无聊在,如果答案超过范围,输出0……代码://// Created by house on 1/9/17.//

2017-01-09 14:22:52 208

原创 LeetCode 6 ZigZag Conversion

题意:把字符串S变成ZigZag模式,再按行输出。思路:这题真的很无聊…  只要明白ZigZag是什么样子就行了…  假设输出5行,则ZigZag是这样的:0 * * * 81 * * 7 92 * 6 * 103 5 * * 114 * * * 12上图*表示空格,其实可以看到循环节为row * 2 - 2,那么只需要计算输出的位置就好了,不用int[

2017-01-09 14:14:33 188

原创 LeetCode 5 Longest Palindromic Substring

题意:最长回文子串思路:manacher裸题… = =!代码://// Created by house on 1/9/17.//class Solution {public: string longestPalindrome(string s) { stringstream ss; ss << "#";

2017-01-09 13:45:47 270

原创 LeetCode 4 Median of Two Sorted Arrays

题意:给出两个已经排好序的数组A和B,求A、B中所有元素的中位数。要求时间复杂度O( log(n + m) )。思路:时间复杂度的限制 + A和B已经有序,好容易想到二分查找…我的做法是二分寻找所有元素的中间或中间偏大数字(叫它X),即,如果一共5个元素就找第3个,一共6个就找第4个。要注意的点是,这个数字不一定在A还是B中,而且重复元素很讨厌。下面给出具体做法:

2017-01-09 13:33:45 209

原创 LeetCode 3 Longest Substring Without Repeating Characters

题意:找出S中没有重复字符的子串。思路:用队列维护没有重复字符的子串,每次队列中进入一个元素,判断是否有队中重复元素,如果有,就从队首一直做出队操作,知道刚刚重复的那个字符出队。时间复杂度O(n),空间复杂度O(m)即字符集大小。官方题解中用了map或者set的方法我是不认的,毕竟时间复杂度O(nlogn),用hashmap和hashset这种事不好说。但是官方题解

2017-01-09 12:08:06 217

原创 LeetCode 2 Add Two Numbers

题意:给了两个数字的链表表示(从低位到高位),输出它们的和的链表表示。思路:与高精度加法完全一样。锻炼一下链表和指针使用是这题的意义吧。注意最高位的进位问题。如果给出的链表是从高位到低位的,那就手动将它转过来处理吧(做点延伸性思考…其实很简单…)代码://// Created by house on 1/9/17.///** * Defin

2017-01-09 11:38:48 213

原创 LeetCode 1 Two Sum

题意:给出数组A和sum,求A[i] + A[j] = sum的i和j,要求i!=j。思路:可以O(n^2)枚举,不推荐。我的做法是O(nlogn)的two-pass方法,即扫一遍把A[i]扔map里,再扫一遍对每个A[i]找sum - A[i]。官方题解中的one-pass应该更优。这题很简单,唯一要注意的就是A[i] + A[i] = sum。代码:

2017-01-09 11:27:46 234

空空如也

空空如也

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

TA关注的人

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