leetcode
ccczxacxzxcz
Be low.
展开
-
[leetcode]2. Add Two Numbers
2. Add Two Numbers (c++) You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single ...原创 2018-08-27 09:42:12 · 76 阅读 · 0 评论 -
[leetcode]9. Palindrome Number
9. Palindrome Number (c++)Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.Example 1:Input: 121Output: trueExample 2:Inpu...原创 2018-08-27 10:06:00 · 89 阅读 · 0 评论 -
[leetcode] 7. Reverse Integer (easy)
原题水题 唯一注意的点就是数字溢出class Solution{public: int reverse(int x) { long long MAX = ((long long)1 << 31) - 1; long long MIN = 0 - (1 << 31); long long a = 0; while (x)...原创 2018-09-15 21:06:03 · 61 阅读 · 0 评论 -
[leetcode] 110. Balanced Binary Tree (easy)
原题链接水题 深度搜索每一节点的左右深度,左右深度差大于1就返回false。class Solution { public: bool isBalanced(TreeNode *root) { bool flag = true; if (!root) return true; dfs(root, flag); return flag; }...原创 2018-09-16 10:41:56 · 125 阅读 · 0 评论 -
[leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal (Medium)
原题题意: 根据先序和中序得到二叉树(假设无重复数字)思路: 先手写一次转换过程,得到思路。 即从先序中遍历每个元素,(创建一个全局索引,指向当前遍历到的元素)在中序中找到该元素作为当前的root,以该节点左边所有元素作为当前root的左支,右同理。 重复分别对左右边所有元素做相同处理。class Solution{public: TreeNode *buildTree...原创 2018-09-16 11:22:30 · 79 阅读 · 0 评论 -
[leetcode] 3. Longest Substring Without Repeating Characters
原题链接求最长不连续子序列利用map存储每一个字符上一次出现的位置,遍历string,比较 当前位置与上一次出现该字母的位置之差 和 记录的最大值 的大小修改最大值。class Solution{public: map<char, int> maps; int lengthOfLongestSubstring(string s) { int i, M...原创 2018-09-17 20:55:41 · 70 阅读 · 0 评论 -
[leetcode] 905. Sort Array By Parity [easy]
原题链接很水的一道题,就是数组内部交换。水题就想着减少复杂度嘛,于是学到一种交换写法。class Solution{public: vector<int> sortArrayByParity(vector<int> &A) { int i = 0, j = A.size()-1; while (i < j) { ...原创 2018-09-23 23:10:45 · 142 阅读 · 0 评论 -
[leetcode] 309. Best Time to Buy and Sell Stock with Cooldown(medium)
原题思路:状态转移出售股票的状态,最大利润有两种可能。一,和昨天一样不动;二,昨天持有的股票今天卖掉。sell[i] = max(sell[i-1],buy[i-1] + prices[i]);购买股票的状态,最大利润有两种可能。一,和昨天一样不动;二,两天前出售,今天购买。bdp[i] = Math.max(bdp[i-1],sell[i-2] - prices[i]);...原创 2018-09-24 15:57:03 · 110 阅读 · 0 评论 -
[leetcode] 621. Task Scheduler(medium)
原题思路:按频率最大的字母来分块,频率最大的字母个数-1为分成的块数,每一块个数为n+1比如AAABBCE,n=2, 则分为A…A… +AAAABBBCCEE,n=2,则分为AB…AB… +AB答案 = MAX(原数组长度,所有分块的长度和 + 频率最大的字母种数)仅当n=0时,答案是原数组长度。class Solution {public: int leastInterv...原创 2018-09-24 17:39:58 · 97 阅读 · 0 评论 -
[leetcode] 94. Binary Tree Inorder Traversal
原题思路:Dfs.class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> vec; dfs(root, vec); return vec; } void dfs(TreeNode *root, vector<int...原创 2018-09-24 22:29:07 · 61 阅读 · 0 评论 -
[leetcode] 238. Product of Array Except Self (medium)
原题思路:注意时间复杂度,分别乘积左右两边,可达到O(n)class Solution { public: vector<int> productExceptSelf(vector<int> &nums) { int len = nums.size(); vector<int> res(len, 1); int lef...原创 2018-09-25 10:45:46 · 104 阅读 · 0 评论 -
[leetcode] 4. Median of Two Sorted Arrays
原题思路一:题目要求O(log (m+n))复杂度,一开始想到的是(m+n),遂试了下,发现居然也过了。。新建一个数组,排序保存两个数组中的元素(mid+1)个,没有什么难度,防越界,注意奇偶数。class Solution{public: double findMedianSortedArrays(vector<int> &nums1, vector<in...原创 2018-09-20 12:05:58 · 67 阅读 · 0 评论 -
[leetcode] 22. Generate Parentheses(medium)
原题思路:利用DFS,搜索每一种情况,同时先加“(”后加")",保证()匹配正确。最近开始学习前端,尝试用js来写。const generate = function (res,content, left, right) { if (left === 0) { res.push(content + ')'.repeat(right)); return...原创 2018-10-01 16:41:34 · 83 阅读 · 0 评论 -
[leetcode] 406. Queue Reconstruction by Height (medium)
原题思路:一开始完全没有思路。。看了别人的思路才解出来。先按照他们的高度从高到低(因为我后面用的从前往后遍历插入,当然也可以从低到高)排序,如果高度一样,那么按照k值从小到大排序。 排完序后我们可以注意到这样一个事实:如果我们按照先处理身最高的,那他们的k值就是他们所应该在的位置——因为已经没有比他们更高的了。 所以我们从高度从高到低按照k值的位置一直插入到答案中即可。cla...原创 2018-09-26 18:34:54 · 109 阅读 · 0 评论 -
[leetcode] 392. Is Subsequence (Medium)
原题判断子序列/** * @param {string} s * @param {string} t * @return {boolean} */var isSubsequence = function(s, t) { var sl = s.length; var tl = t.length; if (sl === 0) { return true; } ...原创 2018-10-11 14:37:02 · 86 阅读 · 0 评论 -
[leetcode] 55. Jump Game (Medium)
原题题目意思即 每一格代表你当前最多能再往后跳几次,从第一格开始,如果能跳到最后一格返回true,反之为false。思路:用一个下标记录当前最多能跳到哪一格,遍历一遍 ——> 如果当前格子不在可以跳到的范围内,则跳出遍历 ——> 如果最多能跳到格子长度大于数组长度,则为true;/** * @param {number[]} nums * @return {boolean}...原创 2018-10-12 15:34:15 · 82 阅读 · 0 评论 -
[leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal(medium)
原题地址思路:和leetcode105题差不多,这道题是给中序和后序,求出二叉树。解法一:思路和105题差不多,只是pos是从后往前遍历,生成树顺序也是先右后左。class Solution { public: TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) ...原创 2018-09-23 00:38:13 · 57 阅读 · 0 评论 -
[leetcode] 559. Maximum Depth of N-ary Tree (easy)
原题链接思路:简单bfsclass Solution{public: int maxDepth(Node *root) { int depth = 0; if (root == NULL) return 0; queue&lt;Node *&gt; q; q.push(root); while (q.size() &gt; 0)...原创 2018-09-28 01:43:52 · 135 阅读 · 0 评论 -
[leetcode ]429. N-ary Tree Level Order Traversale (easy)
原题思路:bfs,每一层遍历一次加到一个vector,同时把该点的子元素加到queue中。class Solution{ public: vector<vector<int>> levelOrder(Node *root) { vector<vector<int>> res; if (roo...原创 2018-09-28 10:55:37 · 69 阅读 · 0 评论 -
[leetcode] 45. Jump Game II(hard)
原题题意:是Jump Game的衍生题(题解),题意求跳到最后一格所需最少步数,(默认所测数据永远可以跳到最后一格)。思路:利用贪心,遍历数组,记录在每一步可跳跃到的最大区域。1.当前步数 超过已覆盖范围,则表示需要进行跳跃,同时更新已覆盖区域,可覆盖区域。2.当前步数 在已覆盖范围内,说明无需进行跳跃,同时更新可覆盖区域。/** * @param {number[]} nu...原创 2018-10-13 10:54:07 · 98 阅读 · 0 评论 -
[leetcode] 67. Add Binary (easy)
原题链接思路:用一个数保存进制,从后往前不断pop出两个数字和进制数相加,放入返回值中。var addBinary = function(a, b) { var arrA = a.split(''); var arrB = b.split(''); var len = Math.max(a.length, b.length), c = 0, result = '';...原创 2018-10-08 00:48:44 · 81 阅读 · 0 评论 -
[leetcode] 290. Word Pattern (easy)
原题思路:建立两个哈希表,分别保存:1 模式 :单词2 单词 :是否出现过水题/** * @param {string} pattern * @param {string} str * @return {boolean} */var wordPattern = function(pattern, str) { var pats = pattern.split(''); ...原创 2018-10-08 13:37:15 · 85 阅读 · 0 评论 -
[leetcode] 134. Gas Station (medium)
原题题意:过一个循环的加油站,每个加油站可以加一定数量的油,走到下一个加油站需要消耗一定数量的油,判断能否走一圈。思路:一开始思路就是遍历一圈,最直接的思路。class Solution{ public: int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {...原创 2018-10-15 00:26:46 · 99 阅读 · 0 评论 -
[leetcode] 120. Triangle (Medium)
原题思路:dp,从下往上依次取得最小的,取到最上面的,就是一条最小的路径。class Solution{public: int minimumTotal(vector<vector<int>> &triangle) { int rowSize = triangle.size(); int colSize; if (rowSi...原创 2018-10-18 15:39:01 · 61 阅读 · 0 评论 -
[leetcode] 543. Diameter of Binary Tree (easy)
原题思路:题目其实就是求左右最长深度的和class Solution{ private: int res = 0; public: int diameterOfBinaryTree(TreeNode *root) { dfs(root); return res; } int dfs(TreeNode *ro...原创 2018-09-30 08:58:22 · 72 阅读 · 0 评论 -
[leetcode]914. X of a Kind in a Deck of Cards (easy)
原题题目原意可转换为两组有大于等于2的公因数/** * @param {number[]} deck * @return {boolean} */var hasGroupsSizeX = function(deck) { var map = {}; for (let i = 0; i < deck.length; i++) { if (map[deck[i]])...原创 2018-10-09 11:35:54 · 410 阅读 · 0 评论 -
leetcode 135. Candy (hard)
原题前后两遍遍历class Solution{public: int candy(vector<int> &ratings) { vector<int> res; int len = ratings.size(); for (int i = 0; i < len; i++) { res.push_ba...原创 2018-10-16 11:01:12 · 82 阅读 · 0 评论 -
[leetcode] 64. Minimum Path Sum (medium)
原题简单动态规划重点是:grid[i][j] += min(grid[i][j - 1], grid[i - 1][j]);class Solution { public: int minPathSum(vector<vector<int>> &grid) { for (int i = 1; i < grid.size(); i++) {...原创 2018-10-16 11:40:23 · 180 阅读 · 0 评论 -
[leetcode] 147. Insertion Sort List (Medium)
原题别人的思路 非常简洁function ListNode(val) { this.val = val; this.next = null;}/** * @param {ListNode} head * @return {ListNode} */var insertionSortList = function(head) { if (head === null) {...原创 2018-10-10 14:38:58 · 62 阅读 · 0 评论 -
[leetcode] 63. Unique Paths II (medium)
原题思路:用到dp的思想,到row,col点路径数量 :path[row][col]=path[row][col-1]+path[row-1][col];遍历row*col,如果map[row][col]为1,则将其置为0;如果非1,则进行上述公式。最后返回path[终点row][终点col]的值即为解。一开始的代码,beat 44%,效率不高class Solution { p...原创 2018-10-16 22:38:05 · 73 阅读 · 0 评论 -
[leetcode] 72. Edit Distance (hard)
原题dp利用二维数组dp[i][j]存储状态: 从字符串A的0~i位子字符串 到 字符串B的0~j位子字符串,最少需要几步。(每一次删增改都算1步)所以可得边界状态dp[i][0]=i,dp[0][j]=j。以及状态转移方程即当比较 word1[i] 和 word2[j] 字符 相等 时,所需步数与 word1[i-1] 和 word2[j-1] 相等。状态转移方程为:dp[i][j]...原创 2018-10-19 22:12:29 · 56 阅读 · 0 评论 -
[leetcode]375 Guess Number Higher or Lower II (Medium)
原题思路:miniMax+DPdp[i][j]保存在i到j范围内,猜中这个数字需要花费的最少 money。“至少需要的花费”,就要我们 “做最坏的打算,尽最大的努力”,即取最大值。dp[beg][end] =MIN ( i + max(helper(beg, i - 1, dp), helper(i + 1, end, dp)) )class Solution{public:...原创 2018-10-22 12:09:24 · 67 阅读 · 0 评论 -
[leetcode] 96 Unique Binary Search Trees (Medium)
原题思路:一开始妹有一点思路,去查了二叉查找树,发现有个叫做卡特兰数的东西。1、求可行的二叉查找树的数量,只要满足中序遍历有序。2、以一个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积。3、总的数量是将以所有结点为根的可行结果累加起来。写成表达式如下:class Solution{public: int numTrees(int n) { if (n &amp;...原创 2018-10-20 17:42:32 · 86 阅读 · 0 评论 -
[leetcode]95 Unique Binary Search Trees II (Medium)
原题字母题添加链接描述一开始完全没有思路。。 百度看了别人的思路,对于这种递归构造的题目还是不熟,得多做做了。这个题目难在构造出来。一般构造树都需要递归。从1–n中任意选择一个数当做根节点,所以其左边的数字构成其左子树,右边的数字当做右子树。因为要求出所有的子树,所以当左子树固定的时候,把所有可能的右子树都构成,然后再变换左子树。这个代码难理解的地方在于left_nodes 和 ri...原创 2018-10-20 20:03:21 · 85 阅读 · 0 评论 -
[leetcode] 111.Mininum Depth of Binary Tree (Easy)
原题寻找二叉树最短深度这里用了dfs,beat 100%,4msclass Solution{public: int minDepth(TreeNode *root, int minNum = 0) { if (root == NULL) { return minNum == 0 ? minNum : 999999; } if (roo...原创 2018-10-28 09:03:08 · 70 阅读 · 0 评论 -
[leetcode] 103 Binary Tree Zigzag Level Order Traversal (Medium)
原题链接题目要求以“Z”字型遍历二叉树,并存储在二维数组里。利用BFS,对每一层进行遍历。对于每一层是从左还是从右,用一个整数型判断当前是偶数行还是奇数行就可以了。class Solution{public: vector<vector<int>> res; vector<vector<int>> zigzagLevelOrder(...原创 2018-10-28 10:16:51 · 72 阅读 · 0 评论 -
[leetcode] 62 Unique Paths (Medium)
原题链接字母题 : unique paths Ⅱ思路:dp[i][j]保存走到第i,j格共有几种走法。因为只能走→或者↓,所以边界条件dp[0][j]+=dp[0][j-1]同时容易得出递推 dp[i][j]+=dp[i-1][j]+dp[i][j-1]class Solution { public: int uniquePaths(int m, int n) { if ...原创 2018-10-23 12:13:40 · 124 阅读 · 0 评论 -
[leetcode] 486. Predict the Winner (medium)
原题思路:解法一:转换比较拿取分数多少的思路,改为考虑 player拿的分数为正,把Player2拿的视为负,加上所有分数,如果最后结果大于0则Player1赢。思考得出递归表达式:max(nums[beg] - player2(beg + 1, end), nums[end] - player2(beg, end + 1))此解法效率很差 104ms,beats 5.32%clas...原创 2018-10-22 00:27:28 · 62 阅读 · 0 评论 -
[leetcode]88. Merge Sorted Array(Easy)
原题合并集,不需要去重,在原nums1上完成。从后往前遍历:当Nums1[i]>Nums2[j]时,插入Nums1[i]到Nums1右边当Nums1[i]<=Nums2[j]时,插入Nums2[j]到Nums1右边class Solution{public: void merge(vector<int> &nums1, int m, vector&l...原创 2018-10-29 08:13:02 · 94 阅读 · 0 评论 -
[LeetCode] 32. Longest Valid Parentheses (hard)
原题链接题意:寻找配对的(),并且返回最长可成功配对长度。思路配对的()必须是连续的,比如()((),最长长度为2;()(),最长长度为4。解法一 dp:利用dp记录以s[i]为终点时,最长可配对长度。仅当遍历到s[i]==’)'的时候记录。dp[i]=dp[i-1]+2 加上当前组其他对的长度dp[i]+=dp[i-dp[i]] 加上邻近的上一组的总长度cla...原创 2018-10-30 00:32:29 · 54 阅读 · 0 评论