leetcode
sigh1988
这个作者很懒,什么都没留下…
展开
-
[leetcode刷题系列]Two Sum
这题没什么好说的, 直接上代码了。class Solution {public: vector twoSum(vector &numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function map has原创 2013-07-31 22:56:14 · 1000 阅读 · 0 评论 -
[leetcode刷题系列]Longest Substring Without Repeating Characters
简单的dp题const static int MAXN = 1 << 20;int dp[MAXN];class Solution {public: int lengthOfLongestSubstring(string s) { // Start typing your C/C++ solution below // DO NOT wri原创 2013-07-31 23:12:27 · 545 阅读 · 0 评论 -
[leetcode刷题系列]Next Permutation
应该算经典问题了。 解法就是从后往前找到第一个小于它后面的那个数。记录下他的位置p,然后再从后往前中第一个大于位置p上面的数的数的位置,记录为first。然后交换p和first上面的数字,并将位置p以后的序列反转就可以了。class Solution {public: void nextPermutation(vector &num) { // Start typ原创 2013-07-31 23:22:56 · 657 阅读 · 0 评论 -
[leetcode刷题系列]Longest Palindromic Substring
这个题至少是存在nlogn的解法的,利用后缀数组。是否存在O(n)的解法已经不记得了。印象中似乎是有O(n)。有兴趣的同学可以去研究下。另外这个题还可以利用二分+哈希的做法去解,复杂度同样是nlogn.由于nlogn的写法太长了。 而这个题目的n最大规模只是1000而已。所以就简单的优化了下。用了最坏情况下n^2的解法。const static int MAXN = 1000 + 10原创 2013-07-31 23:53:39 · 567 阅读 · 0 评论 -
[leetcode刷题系列]Add Two Numbers
模拟题, 也没什么好说的/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:原创 2013-07-31 23:39:11 · 475 阅读 · 0 评论 -
[leetcode刷题系列]Palindrome Number
也没啥好说的class Solution {public: // x >= 0 long long reverse(int x){ long long ret = 0; while(x > 0) ret = ret * 10 + x % 10, x /= 10; return ret; }原创 2013-08-01 10:33:39 · 450 阅读 · 0 评论 -
[leetcode刷题系列]Container With Most Water
不做acm很长时间。脑子确实顿了很多。 这题思考了十多分钟至少。其实还是比较简单。不是很清楚是否存在O(n)的解法。 但是O(nlogn)的解法还是比较好想的。对所有的点按照高度排序, 高的排前面, 挨的排后面。然后从前往后遍历。 遍历过程中记录下已出现过的坐标的最大值和最小值。然后利用当前坐标的高度去乘以当前坐标记录最大值和最小值当中的记录最长的值,然后去更新答案。最后就是结果了。可能说原创 2013-08-01 10:57:28 · 672 阅读 · 0 评论 -
[leetcode刷题系列]Longest Common Prefix
模拟题- -class Solution {public: string longestCommonPrefix(vector &strs) { // Start typing your C/C++ solution below // DO NOT write int main() function if(strs.size() <=原创 2013-08-01 11:06:14 · 490 阅读 · 0 评论 -
[leetcode刷题系列]Reverse Integer
这题没啥好说的。直接上代码。不过这题有些不严谨。有些int被reverse之后就超过int了。需要用longlong。class Solution {public: int reverse(int x) { // Start typing your C/C++ solution below // DO NOT write int main() func原创 2013-08-01 10:28:48 · 455 阅读 · 0 评论 -
[leetcode刷题系列]Valid Parentheses
简单题,利用stack模拟就好了,如果最近的两个是一对,我们就把它们消掉,否则就把最新的放到stack去。最后看stack是否为空。class Solution {public: bool valid(char left, char right){ if(left == '(' && right == ')') return true原创 2013-08-02 22:00:16 · 482 阅读 · 0 评论 -
[leetcode刷题系列]Generate Parentheses
简单题。 dfs就行class Solution { vector vc; void dfs(string s, int left, int right){ if(left == 0 && right == 0){ vc.push_back(s); return ; } if(lef原创 2013-08-02 22:05:46 · 494 阅读 · 0 评论 -
[leetcode刷题系列]Merge k Sorted Lists
简单模拟题/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { ListNode * he原创 2013-08-02 22:14:47 · 456 阅读 · 0 评论 -
[leetcode刷题系列]Swap Nodes in Pairs
这题写的时间有点长, 犹豫了很久。 还是对指针的操作不够熟练, 以前也没怎么练习过操作指针。 看来是要专门练一下。思路比较简单/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(原创 2013-08-02 22:44:30 · 617 阅读 · 0 评论 -
0802leetcode刷题总结
今天刷的题目都比较简单。首先两个括号序列类的题目没啥难度。 模拟下就ok了。 发现的一点小问题就是对stack的接口有点忘了。front和top不知道是是哪个。 需要熟练下。另外的三个题目都是指针链表相关的, 尽管都做出来了, 但是最后的swap那个题目花费了点时间。 对指针的操作还是不够熟练 ,得加强。 大体这么多 ,明天继续:)原创 2013-08-02 22:47:48 · 539 阅读 · 0 评论 -
[leetcode刷题系列]Maximun Subarray
经典的DP题目了,没啥好说的class Solution {public: int maxSubArray(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function int ans = A[0];原创 2013-08-04 00:41:08 · 488 阅读 · 0 评论 -
0803leetcode刷题总结
今天虽然看上去刷了7道题, 但是有有两对基本上一样的, 所以实际上是5道。而且今天的题目都很简单, 没啥好说的。也没太多的收获,非要说的话也就两点1)in-place的90度旋转矩阵貌似我女朋友去年面试进微软的时候被面到过2)next_permutaiton这个的字典序写法前段时间刚研究了。另外组合数学上还有另外一种求法, 但是不是字典序的。原创 2013-08-04 00:44:54 · 696 阅读 · 0 评论 -
[leetcode刷题系列]Permutations II
。。囧,我直接把Permutations的代码贴过来修改了下就好了。有兴趣的直接看下上一篇就好了原创 2013-08-03 23:31:51 · 478 阅读 · 0 评论 -
[leetcode刷题系列]Rotate Image
算是模拟题把, 至于in-place,简单想下就好了, 规律还是很容易发现的。只是写的时候下标要想清楚,别写错。class Solution { void change(int &a, int &b, int &c, int &d){ int tmp = d; d = c; c = b; b = a; a原创 2013-08-03 23:59:40 · 447 阅读 · 0 评论 -
[leetcode刷题系列]Permutations
很基本的题目把, 不过貌似限制了不许用stl现有的next_permutation, 反正用的时候显示编译错误了,不知道是不是我写错了。于是就直接自己写了个next_permutation的实现。 由于最近一直有在看英文版的组合数学,而且最近恰巧也练习过如何按照字典序得出所有的序列。所以这题写的比较顺利, 编译通过后就过了。class Solution { bool next_原创 2013-08-03 23:27:58 · 520 阅读 · 0 评论 -
[leetcode刷题系列]Pow(x,n)
简单题, 二进制logn求解,不过题目数据什么的不是特别严谨。class Solution {public: double pow(double x, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function // 1原创 2013-08-04 00:06:07 · 528 阅读 · 0 评论 -
[leetcode刷题系列]N-Queens
经典题目了, 递归搜索就行了class Solution { const static int MAXN = 100; bool col[MAXN], add[MAXN], minus[MAXN]; int ans[MAXN]; void dfs(int now, int n, vector >& ret){ if(now >= n){原创 2013-08-04 00:34:54 · 572 阅读 · 0 评论 -
[leetcode刷题系列]N-Queens 2
囧, 和上题基本上一样,没啥好说的class Solution { const static int MAXN = 100; bool col[MAXN], add[MAXN], minus[MAXN]; int ans[MAXN]; void dfs(int now, int n, int& ret){ if(now >= n){原创 2013-08-04 00:38:32 · 538 阅读 · 0 评论 -
[leetcode刷题系列]Longest Valid Parentheses
刚开始尝试了最坏情况下O(n^2)的解法, 试图睡过去, 结果大数据TLE了。 于是只能寻找O(n)的解法。如果对括号序列的性质比较熟悉的话, 还是比较容易想到的, 只是实现的时候要细心写, debug的时候耗费的时间长了点。有个小情况开始没想到。代码写的稍微啰嗦了点,懒得优化了- -class Solution { public: int longestValidP原创 2013-08-04 20:14:54 · 501 阅读 · 0 评论 -
0804leetcode刷题总结
今天刷的题目依旧很简单。 一道括号序列,三道二分,一道二叉树。没什么难度。似乎没什么好总结的- - 二叉树这题算是又练习了一下指针把。 括号序列这题让我对括号序列的认识更深了一点,以前没求过最长括号子序列。算是有收获。明天继续,加油:)原创 2013-08-04 21:18:20 · 698 阅读 · 0 评论 -
[leetcode刷题系列]Search in Rotated Sorted Array
简单想下, 其实比较简单, 三次二分。一次二分用来找数组的分界点然后分别两次二分在分界的左右查找target就可以了log(n)的算法复杂度class Solution {public: int search(int A[], int n, int target) { // Start typing your C/C++ solution below原创 2013-08-04 20:24:41 · 486 阅读 · 0 评论 -
[leetcode刷题系列]Binary Tree Maximum Path Sum
简单的dfs,不过由于节点的权重有正有负, 所以没有一次性写对, 以为全是正的。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NU原创 2013-08-04 20:51:37 · 828 阅读 · 1 评论 -
[leetcode刷题系列]Search for a Range
二分查找的基础题, 没啥好说的class Solution { // first place >= target int binary(int *a, int st, int en, int target){ int low = st, high = en - 1, mid; while(low <= high) if(a原创 2013-08-04 20:30:37 · 469 阅读 · 0 评论 -
[leetcode刷题系列]Search Insert Position
依旧是二分基础题, 没啥好说的- -class Solution {public: int searchInsert(int A[], int n, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function in原创 2013-08-04 20:35:09 · 560 阅读 · 0 评论 -
[leetcode刷题系列]Pascal's Triangle II
依旧没啥好说的, 利用滚动数据就可以做到O(k)的空间了class Solution {public: vector getRow(int rowIndex) { // Start typing your C/C++ solution below // DO NOT write int main() function int a[2][原创 2013-08-05 20:38:24 · 533 阅读 · 0 评论 -
[leetcode刷题系列]Sum Root to Leaf Numbers
简单模拟题,算是又练习了下指针把。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}原创 2013-08-05 21:24:17 · 537 阅读 · 0 评论 -
[leetcode刷题系列]Path Sum II
- - 水题, 继续模拟, 练习指针/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {原创 2013-08-05 23:49:13 · 580 阅读 · 0 评论 -
[leetcode 刷题系列]Permutation Sequence
- - 利用permutation的性质模拟就好了class Solution { int fib(int x){ int ret = 1; for(int i = 1; i <=x; ++ i) ret = ret * i; return ret; } void dfs(int n, in原创 2013-08-06 00:19:58 · 600 阅读 · 0 评论 -
0805leetcode刷题总结
今天刷了11道水题- -基本上没啥好说的非要说也就是Longest Consecutive Sequence 这道了, 害的我耽误了好长时间, 最后也没发现什么靠谱的O(n)的算法。最后还是hash猥琐过去了。假装自己是O(n).然后还值得一提的就是Gray Code这题,也算是没枉费我最近一直有在看组合数学。 有付出有回报嘛。 继续看。 加油:)明天继续把原创 2013-08-06 00:24:58 · 571 阅读 · 0 评论 -
[leetcode刷题系列]Longest Consecutive Sequence
囧, 这题nlogn的方法是显然的不能更显然了。然后题目提示有O(n)的算法。 然后似乎也没遇到过这个题目的O(n)解法。于是就想啊想啊,各种想。 期间是想到过用hash表, 在假设查找均摊复杂度为O(1)的情况下, 是可以认为O(n)的。然后实现想不出来非hash的。可以认为是O(n)的算法, 于是Google了一番。 发现要摸是nlogn,要摸就是hash的。囧就这样吧, 估计没有原创 2013-08-05 23:09:02 · 748 阅读 · 0 评论 -
[leetcode刷题系列]Path Sum
简单模拟题- -又练习指针了/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2013-08-05 23:42:44 · 968 阅读 · 0 评论 -
[leetcode刷题系列]Maximum Depth of Binary Tree
囧, 继续模拟, 继续指针!/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2013-08-06 00:00:09 · 598 阅读 · 0 评论 -
[leetcode刷题系列]Subsets
- - 没啥好说的class Solution { vector parse(int s, vector v){ vector ret; for(int i = 0; i < v.size(); ++ i) if(s & (1 << i)) ret.push_back(v[i]);原创 2013-08-06 12:26:54 · 601 阅读 · 0 评论 -
[leetcode刷题系列]Pascal's Triangle
没啥好说的哈const int MAXN = 100 + 10;int comb[MAXN][MAXN];class Solution { int get_comb(int n, int m){ if(m > n) return 0; if(m == 0 || n == m) return 1;原创 2013-08-05 20:30:33 · 475 阅读 · 0 评论 -
[leetcode刷题系列]Triangle
当初做acm的时候,据说这是有算法比赛以来的第一道动态规划题目。题目中要求的空间复杂度依旧可以用滚动数组来完成。class Solution {public: int minimumTotal(vector > &tri) { // Start typing your C/C++ solution below // DO NOT write int原创 2013-08-05 20:44:55 · 629 阅读 · 0 评论 -
[leetcode刷题系列]Minimum Depth of Binary Tree
- - 不说了/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */cla原创 2013-08-06 00:02:58 · 539 阅读 · 0 评论