Leectcode
xshengh
这个作者很懒,什么都没留下…
展开
-
Leetcode 3Sum
类似于2Sum做法,复杂度是O(n^2),难点在于如何去重三元组。每次遇到符合的三元组,push_back进vector以后,还要继续往下扫,还有没有符合的,但是往下扫的时候记得跳过相同的元素。附上K-Sum:求和问题总结的链接http://tech-wonderland.net/blog/summary-of-ksum-problems.htmlclass Solution {pu原创 2013-12-12 17:25:25 · 664 阅读 · 0 评论 -
Leetcode Binary Tree Postorder Traversal
递归和非递归。递归:简单。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2013-11-12 16:18:00 · 724 阅读 · 0 评论 -
Leetcode Trapping Rain Water
一开始思路就错了。以为每次找到一个局部的最小值,然后向两边展开就可以了,后来WA了巨多次,发现make no sense。然后换了另一种做法,先找出最高点,然后初始化局部最高点为头尾两个点,并由两边往最高点处遍历,每遇到一个比局部最高点大的数就停下来就算一次水的容量,并更新局部最高点。class Solution {public: int trap(int A[], int n)原创 2013-11-26 14:03:01 · 609 阅读 · 0 评论 -
Leetcode Sum Root to Leaf Numbers
还是dfs。跟Minimum Depth of Binary Tree以及Maximum Depth of Binary Tree很像。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * T原创 2013-11-25 11:44:42 · 674 阅读 · 0 评论 -
Leetcode Search in Rotated Sorted Array I && II
二分查找变形。比较时判断target是处于是否处于有序的那一段,判断是否处于有序的方法是:比较A[mid]和A[low]或者A[high]的大小。如果有重复的元素,那么还要在比较前对数组进行处理,如果A[mid]==A[low]则low++,直到不等。Search in Rotated Sorted Array I:class Solution {public: int原创 2013-11-24 14:51:54 · 691 阅读 · 0 评论 -
Leetcode Minimum Depth of Binary Tree
简单的dfs。每到一个节点,先判断是否为空,然后判断是否为叶子节点,两者都不是的话,就继续dfs该节点的左右节点。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :原创 2013-11-25 11:07:00 · 581 阅读 · 0 评论 -
Leetcode Palindrome Number
判断回文数,要求常数空间。头尾一起检查,尾数好检查,直接模10。头数就没那么简单,所以检查前,要先对该数进行处理,获得位数相应的整十数。class Solution {public: bool isPalindrome(int x) { // IMPORTANT: Please reset any member data you declared, as原创 2013-11-25 11:03:46 · 539 阅读 · 0 评论 -
Leetcode Combinations
简单的dfs。class Solution {public: vector > combine(int n, int k) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each t原创 2013-11-23 16:24:23 · 537 阅读 · 0 评论 -
Leetcode Populating Next Right Pointers in Each Node II
网上大部分的做法都是递归,看了leetcode dicuss上的一个做法,挺巧妙的,先找出下一层的第一个结点,然后连接每一层的结点。/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; *转载 2013-11-22 22:46:16 · 631 阅读 · 0 评论 -
Leetcode Binary Tree Preorder Traversal
递归直接dfs,非递归用stack。递归:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL原创 2013-11-08 15:20:52 · 545 阅读 · 0 评论 -
Leetcode Path Sum
dfs。注意判断是不是叶子结点。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }原创 2013-11-05 22:21:47 · 481 阅读 · 0 评论 -
Leetcode Sort Colors
扫两遍的话,用计数排序。class Solution {public: void sortColors(int A[], int n) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused fo原创 2013-11-17 16:37:39 · 695 阅读 · 0 评论 -
Leetcode Set Matrix Zeroes
看了网上的题解,很巧妙的做法。本来想到的做法是O(m+n),用两个数组来分别记录哪一行和哪一列需要置0。而O(1)的做法实际上就是利用矩阵的第一行和第一列来充当这两个数组,当然事先要判断一下,第一行和第一列要不要置0,作上标记。到最后再来更新。class Solution {public: void setZeroes(vector > &matrix) {原创 2013-11-03 12:45:29 · 549 阅读 · 0 评论 -
Leetcode Plus One
一开始理解错了题意,以为是数组的每一个数可以是多位数,后来看了case以后发现原来都是一位数,英语捉急。水题。从最后一位数开始判断,直到不是9的数出现。class Solution {public: vector plusOne(vector &digits) { // IMPORTANT: Please reset any member data you dec原创 2013-11-02 22:38:52 · 747 阅读 · 0 评论 -
Leetcode Generate Parentheses
简单的dfs。class Solution {public: vector generateParenthesis(int n) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for原创 2013-11-02 16:46:23 · 659 阅读 · 0 评论 -
Leetcode Single Number II
转载自:http://www.cnblogs.com/daijinqiao/p/3352893.html对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。用ones记录到当前计算的变量为止,二进制1出现“1次”(mod 3 之后的 1)的数位。用twos记录到当前计算的变量为止,二进制1出现“2次”(mod 3 之后的 2)转载 2013-11-02 18:37:06 · 640 阅读 · 0 评论 -
Leetcode Linked List Cycle II
解法参考:http://blogread.cn/it/article/2452?f=hot1先判断有没有环,有环的话,设两个指针,一个指针在head,另一个指针在相遇的点,两个指针同时往前走,则这两个指针相遇的点就是环的开始节点。/** * Definition for singly-linked list. * struct ListNode { * int val;原创 2013-11-12 19:58:13 · 763 阅读 · 0 评论 -
Leetcode Valid Parentheses
括号匹配,用STL里的stack可以轻松解决。class Solution {public: bool isValid(string s) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused原创 2013-11-28 21:13:39 · 613 阅读 · 0 评论 -
Leetcode Subsets
dfs again!记得先排序,同时还要记录当前所在的位置,递归的下一层直接从这个位置开始遍历。class Solution {public: vector > subsets(vector &S) { ans.clear(); ans.push_back(v); sort(S.begin(), S.end());原创 2013-12-05 18:00:35 · 868 阅读 · 0 评论 -
Leetcode ZigZag Conversion
模拟。注意当nRows = 1的情况。class Solution {public: string convert(string s, int nRows) { if(nRows == 1) return s; string ans; for(int i = 0; i < nRows; i++){ int j =原创 2013-12-12 14:06:39 · 602 阅读 · 0 评论 -
Leetcode Add Two Numbers
熟悉指针的用法。要先虚拟出一个头指针,但是用二级指针应该可以回避这个问题。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */cl原创 2013-12-12 10:49:21 · 640 阅读 · 0 评论 -
Leetcode Valid Palindrome
判断是否回文,只判断数字和字母,在头尾设置两个指针,记得先转化成小写再进行比较,如果不是数字或者字母要记得跳过。class Solution {public: bool isPalindrome(string s) { if(s.empty()) return true; int i = 0, j = s.size()-1; while原创 2013-12-11 20:37:34 · 589 阅读 · 0 评论 -
Leetcode Add Binary
二进制求和。注意进位就可以了。class Solution {public: string addBinary(string a, string b) { string ans; int carry = 0, num; for(int i = 0; i < max(a.size(), b.size()); i++){原创 2013-12-11 20:13:04 · 719 阅读 · 0 评论 -
Leetcode Valid Number
本题WA了无数次,最后逼迫无奈,只能根据WA的情形,对程序不断修正才AC掉的,绝逼痛苦。My Solution:class Solution {public: bool checkD(const char *s, int i){ if(i == beg && i == end){ return false; }转载 2013-12-11 17:02:52 · 1069 阅读 · 0 评论 -
Leetcode Count and Say
模拟。记得把个数转化为字符串。(可能是两位数或以上)。class Solution {public: string countAndSay(int n) { string str = "1", ans = "1"; int num = 1; while(num < n){ char c = str[0];原创 2013-12-09 19:43:41 · 993 阅读 · 0 评论 -
Leetcode Valid Sudoku
遍历,每到一个点,判断该行该列的数是否有与其相同的,由于行比它小以及列比他它小的位置已经比较过了,所以可以直接跳过。然后还要比较该点位于的九宫格是否符合条件。class Solution {public: bool isValidSudoku(vector > &board) { for(int i = 0; i < board.size(); i++){原创 2013-12-09 16:31:06 · 584 阅读 · 0 评论 -
Leetcode Longest Common Prefix
第一个字符串和第二个字符串比较得到最长公共前缀,再用得到的前缀跟下个字符串比较,得到最新的公共前缀,如此遍历下去,得到最后的最长公共前缀就是答案。class Solution {public: string longestCommonPrefix(vector &strs) { string ans, tmp; if(strs.empty()) re原创 2013-12-08 22:29:20 · 579 阅读 · 0 评论 -
Leetcode String to Integer (atoi)
根据提示来做,注意细节即可。class Solution {public: int atoi(const char *str) { long long ans = 0; int i = 0; bool tag = false; while(str[i] == ' '){ i++; }原创 2013-12-08 22:11:52 · 650 阅读 · 0 评论 -
Leetcode Two Sum
水题。直接暴力枚举,当然记得返回的下标是从1开始的。class Solution {public: vector twoSum(vector &numbers, int target) { vector ans; for(int i = 0; i < numbers.size(); i++){ for(int j = i+1; j原创 2013-12-08 21:20:10 · 652 阅读 · 0 评论 -
Leetcode Subsets II
跟I做法一样,不过在dfs的时候要加一个判断条件。在理解了I的做法的基础上去想就很容易明白了。class Solution {public: vector > subsetsWithDup(vector &S) { ans.clear(); v.clear(); ans.push_back(v); sort(S.begi原创 2013-12-07 22:36:28 · 611 阅读 · 0 评论 -
Leetcode Length of Last Word
一开始以为如果最后一个字符是space就不存在最后一个单词,WA了一次。遍历该string,cnt记录当前单词的长度,如果遇到space,还要判断它的下一个字符是不是space,是的话就重置cnt为0,否则不变。class Solution {public: int lengthOfLastWord(const char *s) { int len = strlen(原创 2013-12-08 12:46:32 · 629 阅读 · 0 评论 -
Leetcode Jump Game
一开始想复杂了,其实很简单。将数组遍历一遍,每遍历一个元素就不断更新当前所能到达的最大下标。如果遍历到一个下标市不在最大下标的范围,就返回false。如果能一直遍历到结尾,就返回true。class Solution {public: bool canJump(int A[], int n) { int max_index = 0; for(int原创 2013-12-06 14:26:52 · 564 阅读 · 0 评论 -
Leetcode Path Sum II
dfs,跟Path Sum I 相差无几。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}原创 2013-12-06 14:20:31 · 609 阅读 · 0 评论 -
Leetcode Remove Duplicates from Sorted Array II
与I类似,增加一个tag变量来判断是否已经出现过两次就可以。class Solution {public: int removeDuplicates(int A[], int n) { // IMPORTANT: Please reset any member data you declared, as // the same Solution insta原创 2013-11-15 14:44:55 · 481 阅读 · 0 评论 -
Leetcode Linked List Cycle
判断一个链表是不是循环链表。初始化两个指向头部的指针,一个每次走两步,一个每次走一步,如果相遇就是循环链表,反之则不是。特殊情况是空链表不是循环链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i原创 2013-10-31 17:35:29 · 537 阅读 · 0 评论 -
Leetcode Container With Most Water
设置两个指针i, j,固定较低的边,另一边向中间移动,找到比当前边更高的位置,更新最大容积,循环直至i >=j 结束。class Solution {public: int maxArea(vector &height) { // Start typing your C/C++ solution below // DO NOT write int ma原创 2013-10-31 17:06:13 · 525 阅读 · 0 评论 -
Leetcode Remove Element
与上一题“Remove Duplicates from Sorted Array”类似。class Solution {public: int removeElement(int A[], int n, int elem) { // Note: The Solution object is instantiated only once and is reused by原创 2013-10-16 10:18:17 · 566 阅读 · 0 评论 -
Leetcode Remove Duplicates from Sorted Array
数组删除重复元素,要求常数的空间复杂度。比较简单。class Solution {public: int removeDuplicates(int A[], int n) { // Note: The Solution object is instantiated only once and is reused by each test case.原创 2013-10-15 22:22:05 · 630 阅读 · 0 评论 -
Leetcode Maximum Subarray
经典最大子串和问题,要求用两种方法实现:1、Kadane算法,复杂度O(n); 2、分治法,复杂度O(nlogn)。1、Kadane算法:代码比较简单,但是理解需要时间。初始化ans为0, 每次用ans加上A[i]的值,并更新最大值,如果遇到ansclass Solution {public: int maxSubArray(int A[], int n) {原创 2013-10-14 14:12:57 · 4254 阅读 · 0 评论 -
Leetcode Populating Next Right Pointers in Each Node
把每个结点的next指针指向其右边结点。注意:1、要求常数空间复杂度;2、假设该树是一个完美二叉树(叶子结点在同一层,每个父结点都有两个子结点);3、所有结点的next指针初始化是NULL。方法有很多,这里的作法是bfs层次遍历,同时记录每个最右边的结点,每次判断如果碰到的是最右边结点就设置其next指针为null,否则就设置为队列中的front结点。/** * Defi原创 2013-10-14 11:11:34 · 739 阅读 · 0 评论