LeetCode算法
二叉树
这个作者很懒,什么都没留下…
展开
-
LeetCode第18题之4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.Note: Elements in a quad原创 2016-05-27 12:46:56 · 343 阅读 · 0 评论 -
LeetCode第60题之Permutation Sequence
思想:给定数字n和k后,则(n-1)!表示最高一位固定是可表示的排列的种树,例如,当n=3时:“123” “132” “213” “231” “312” “321” 最高位分别为1,2,3,时都对应两种排列情况。,当k=1、2时,最高位为1,当k=3、4时,最高位为二,当k=5、6时,最高位为3。由规律可知,最高位=(k-1)/(n-1)!+1。 第二位第三位依次类推。 下面给出C+原创 2016-07-01 22:01:25 · 474 阅读 · 0 评论 -
LeetCode第34题之Search for a Range
C++代码:#include <iostream>#include <vector>using namespace std;class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> res(2, -1); int sz = nu原创 2016-06-16 15:40:07 · 364 阅读 · 0 评论 -
LeetCode第46题之 Permutations
主要的思想(深度优先搜索)和我这篇博客一样:找出1到n所有不重复的排列,即n的全排列#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution { void fun(vector<int> &nums, vector<bool> &appear, vector<in原创 2016-06-23 20:21:35 · 308 阅读 · 0 评论 -
LeetCode第37之Sudoku Solver
主要思路:回溯法,每个‘.’的位置遍历“1-9”,如果满足则继续下一个位置,如果遍历完“1-9”仍不满足则将该位置改为‘.’,然后回溯到上一个位置。 缺点就是运行时间有点长。 C++代码:#include <iostream>#include <vector>using namespace std;//打印board矩阵void print_vec(vector<vector<char>>原创 2016-06-17 11:39:48 · 238 阅读 · 0 评论 -
LeetCode第56题之Merge Intervals
思路: 这题不难,先将区间进行“排序”,然后便历每个区间(下面代码中的cur)看是否与前面的区间(下面代码中的tmp)重合。分如下两种情况: (1) 如果重合,将tmp和cur区间合并为一个区间(更新tmp.end); (2) 如果不重合,则tmp为一个合并后的区段,保存tmp。 然而,我做这题的时候开始没有用将compare函数申明为static,然而运行不通过,通过百度之后发现原创 2016-06-29 16:23:56 · 479 阅读 · 0 评论 -
LeetCode第39题之Combination Sum(两种方法)
思路:两种方法都是利用递归回溯,第二方法在第一种方法的基础上对原始数据先进行排序,这样可以剪枝,加快计算速度。第一种方法在LeetCode上测试运行的时间是24ms,第二种方法运行时间为16ms。 方法一:#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {p原创 2016-06-18 12:27:00 · 713 阅读 · 0 评论 -
LeetCode第40题之Combination Sum II
这一题主要是在上一题的基础上解决重复解的问题。 C++代码:#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {private: //res保存满足题意的结果 vector<vector<int>> res; //保存当前的一种方案原创 2016-06-20 19:17:34 · 363 阅读 · 0 评论 -
LeetCode第42题之Trapping Rain Water
下面C++代码只需一遍遍历,具体分析见代码注释:#include <iostream>#include <vector>using namespace std;class Solution {public: int trap(vector<int>& height) { int sum = 0; int n = height.size();原创 2016-06-21 15:11:21 · 383 阅读 · 0 评论 -
LeetCode 43题之 Multiply Strings
详细的算法思路参见我以前的一篇博客:大整数相乘 C++代码:#include <iostream>#include <string>#include <vector>using namespace std;class Solution {public: //将原字符处转换成数组存放 vector<int> stoint(const string &s) {原创 2016-06-21 19:15:33 · 282 阅读 · 0 评论 -
LeetCode第44题之 Wildcard Matching
思想主要参考这里,但那里是用char *保存的字符串,该字符串最后以’\0’字符结尾,故上述代码中p字符串不会越界。而现在字符串是用的string保存,需要讨论p字符串的下标是否越界。 C++代码:#include <iostream>#include <string>#include <vector>using namespace std;class Solution {public:原创 2016-06-22 18:41:48 · 359 阅读 · 0 评论 -
LeetCode第45之 Jump Game II
看了好几种算法实现,感觉这里说的最清楚,也比较简单,本算法思想也是来源于此。 解法看完这道题目,可能大部分的读者都能够想出这样一个相对简单的解法:将每个位置都看作一个点,并从第i个点向它之后的nums[i]个点都连一条长度为1的有向边,而现在的问题就是从0号点到达size-1号点需要的最短距离,这就是一个很简单的最短路问题,实际上由于边的长度均为1,而且不存在环,我们可以用宽度优先搜索(时间复杂度转载 2016-06-23 19:24:43 · 1172 阅读 · 0 评论 -
32. Longest Valid Parentheses
主要参考:http://blog.csdn.net/feliciafay/article/details/20686595,该方法的时间复杂度为O(n)。 C++代码:class Solution { public: int longestValidParentheses(string s) { stack<int> paranStack; int转载 2016-06-14 20:27:57 · 255 阅读 · 0 评论 -
LeetCode第33题之 Search in Rotated Sorted Array
C++代码:#include <iostream>#include <vector>using namespace std;class Solution {public: int search(vector<int>& nums, int target) { int sz = nums.size(); int l = 0; int r =原创 2016-06-15 19:48:44 · 253 阅读 · 0 评论 -
LeetCode第54题之Spiral Matrix
这题题的长和宽不等,所以有可能出现某一圈中有上边没有下边或者有右边没有左边的情况,因此在代码中我在相应位置加入了两个if语句来判断是否是上面的情况(某一圈中有上边没有下边或者有右边没有左边)。 C++代码:#include <iostream>#include <vector>using namespace std;class Solution {public: vector<int原创 2016-06-28 12:47:59 · 329 阅读 · 0 评论 -
LeetCode第19题之 Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example,Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the linked list be原创 2016-05-30 21:39:10 · 309 阅读 · 0 评论 -
LeetCode第20题之Valid Parentheses
方法一:用栈实现 C++代码:#include <stack>#include <iostream>using namespace std;//Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.class S原创 2016-05-31 09:15:17 · 369 阅读 · 0 评论 -
LeetCode第21题之Generate Parentheses(两种解法)
C++代码:#include <vector>#include <iostream>#include <string>using namespace std;class Solution {private: //保存结果 vector<string> res;public: void fun(int deep, int n, int leftNum, int lef原创 2016-06-02 11:28:54 · 443 阅读 · 0 评论 -
LeetCode第29题之Divide Two Integers
C++代码:#include <iostream>#include <limits>using namespace std;class Solution {public: int divide(int dividend, int divisor) { //将int转换成long long int可以省事,例如当被除数与除数分别为-2147483648、 1时,21474原创 2016-06-08 11:13:48 · 354 阅读 · 0 评论 -
LeetCode第49题之 Group Anagrams
分析:这道题如果按照 常规的思路几层for循环暴力求解会超时。这里我主要是利用将每个待处理的字符串排序后用哈希的思想将同构的字符串放在一起。 C++代码:#include <iostream>#include <algorithm>#include <string>#include <map>#include <vector>using namespace std;class Solut原创 2016-06-24 15:29:07 · 390 阅读 · 0 评论 -
LeetCode第50.之Pow(x, n)
运用递归解,另外注意n的各种取值的情况。 C++代码:#include <iostream>#include <limits>using namespace std;class Solution {public: double myPow(double x, int n) { if (0 == n) return 1; else原创 2016-06-25 09:43:52 · 245 阅读 · 0 评论 -
LeetCode第51题之 N-Queens
思路主要是参考我以前的一篇博客:8皇后问题的两种解法,那篇博客思路写的还比较详细,建议看那篇博客。这里我只用第一种解法实现该题。 下面给出C++源代码:#include <iostream>#include <string>#include <vector>using namespace std;class Solution {public: //检查在第k个位置的皇后是否与前k-原创 2016-06-25 13:09:29 · 341 阅读 · 0 评论 -
LeetCode第23题之Merge k Sorted Lists
C++代码:#include <vector>#include <iostream>#include <algorithm>using namespace std;/** * Definition for singly-linked list. */ struct ListNode { int val; ListNode *next; ListNode原创 2016-06-03 20:27:00 · 354 阅读 · 0 评论 -
LeetCode第25题之Reverse Nodes in k-Group
基本思想是对每k个节点采用头插法,时间复杂度为O(n)。 C++代码:#include <vector>#include <iostream>using namespace std;/** * Definition for singly-linked list. */ struct ListNode { int val; ListNode *next;原创 2016-06-04 13:22:12 · 260 阅读 · 0 评论 -
LeetCode第26题之Remove Duplicates from Sorted Array
C++代码:#include <vector>#include <iostream>using namespace std;class Solution {public: int removeDuplicates(vector<int>& nums) { //j遍历数组,如果nums[j]在位置j之前第一次出现,则将它保存到i+1的位置 int sz =原创 2016-06-06 10:20:47 · 279 阅读 · 0 评论 -
LeetCode第53之 Maximum Subarray(两种方法)
解法一: 思路:最大子段和max_sum必是以某个下标为i的数结尾,遍历数组,如果当前子段和tmp_sum大于等于0,则nums[i]+tmp_sum一定不会比nums[i]小。#include <iostream>#include <vector>#include <limits>using namespace std;class Solution {public: int ma原创 2016-06-27 20:48:11 · 619 阅读 · 0 评论 -
LeetCode第47.题之Permutations II
这题和上一题唯一的差别是数组多了重复的元素,所以我首先想到的是STL中计算排列组合关系的算法(这是我以前写的一篇博客)(该算法也适合上一题),具体思想见那篇博客,下面我直接给出C++代码:#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {public:原创 2016-06-23 21:56:32 · 247 阅读 · 0 评论