
中等难度
奈何辰星无可奈
github: hackerchenzhuo
展开
-
leetcode 300. 最长上升子序列 【动态规划常规题】
方法一:执行用时 :52 ms, 在所有C++提交中击败了66.18%的用户内存消耗 :8.7 MB, 在所有C++提交中击败了16.75%的用户DP肯定可以解决这种问题的。每个DP[i]记录到目前为止最大的上升子串长度。每次与前面i-1的DP[i]对比,若其大于等于当前DP的值,则更新。时间复杂度:O(n^2) 空间复杂度:O(n);class Solution...原创 2019-06-18 14:10:35 · 150 阅读 · 0 评论 -
leetcode 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 6输出...原创 2019-06-10 14:22:30 · 753 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi)【简单模拟】
一个简单模拟写了50分钟 。。错了5次。。没谁了(1/6) 准确率16%...哎(好像正好和题目的准确率一样...)【大哥求你细心点!!!!】执行用时 :8 ms, 在String to Integer (atoi)的C++提交中击败了95.34%的用户内存消耗 :8.6 MB, 在String to Integer (atoi)的C++提交中击败了76.54%的用户cl...原创 2019-06-03 23:12:45 · 156 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素【深入理解快速排序】
方法一:理解题目很简单。思路很清晰。最慢的复杂度应该是O(nlogn)。先排序,再查找。执行用时 :16 ms, 在所有C++提交中击败了91.91%的用户内存消耗 :9.4 MB, 在所有C++提交中击败了46.39%的用户...你仿佛在逗我。这都可以超过90%。class Solution {public: int findKthLargest(vector...原创 2019-06-14 23:54:57 · 838 阅读 · 1 评论 -
leetcode 200. 岛屿数量【能够一遍遍历实现的,不要用两遍谢谢】【DFS/BFS均可】
执行用时 :12 ms, 在所有C++提交中击败了98.96%的用户内存消耗 :10.9 MB, 在所有C++提交中击败了81.05%的用户遇到1就DFS,并且岛屿数量+1.class Solution {public: int flag=0;//从2开始选填充标志 int numIslands(vector<vector<char>>&am...原创 2019-06-14 22:55:23 · 725 阅读 · 0 评论 -
动态规划——最大连续子序列和
下面介绍动态规划的做法,复杂度为 O(n)。 步骤 1:令状态 dp[i]表示以 A[i]作为末尾的连续序列的最大和(这里是说 A[i]必须作为连续序列的末尾)。 步骤 2:做如下考虑:因为 dp[i]要求是必须以 A[i]结尾的连续序列,那么只有两种情况:这个最大和的连续序列只有一个元素,即以 A[i]开始,以 A[i]结尾。 这个最大和的连续序列有多...原创 2019-06-09 16:14:23 · 4283 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树【抽象、递归、动态规划、自底向上、自顶向下】
执行用时 :4 ms, 在Unique Binary Search Trees的C++提交中击败了93.54%的用户内存消耗 :8.3 MB, 在Unique Binary Search Trees的C++提交中击败了11.31%的用户解法一:自顶向下用递归和动态规划的方法,找不同的情况。一般这种题是不能真的模拟二叉树构建的,那样子太耗时间了。需要抽象出来流程。...原创 2019-06-08 18:32:45 · 573 阅读 · 0 评论 -
leetcode 590.N叉树的后序遍历
方法一:【比较慢。用的递归思想】执行用时 :288 ms, 在N-ary Tree Postorder Traversal的C++提交中击败了62.39%的用户内存消耗 :127.3 MB, 在N-ary Tree Postorder Traversal的C++提交中击败了10.94%的用户/*// Definition for a Node.class Node ...原创 2019-06-08 11:51:33 · 127 阅读 · 0 评论 -
leetcode 6. Z 字形变换
最快的方法就是跟踪Z的形状碰到可以 mod 的地方(边界处),就转向。时间复杂度,具体点说是O(2n)。【相当于遍历了两次】。特殊情况:维度等于1的时候,拿出来单独考虑。执行用时 :28 ms, 在ZigZag Conversion的C++提交中击败了74.08%的用户内存消耗 :14.3 MB, 在ZigZag Conversion的C++提交中击败了75.08%的用户...原创 2019-06-02 22:02:51 · 124 阅读 · 0 评论 -
leetcode 144. 二叉树的前序遍历【非递归,在中序的基础上修改一丢丢】
执行用时 :4 ms, 在Binary Tree Inorder Traversal的C++提交中击败了96.24%的用户内存消耗 :9.3 MB, 在Binary Tree Inorder Traversal的C++提交中击败了34.53%的用户在进栈前入队,实现前序。(中->前->后)出栈时入队,实现中序。(前->中->后)后序:(前->...原创 2019-06-08 10:55:49 · 345 阅读 · 0 评论 -
leetcode 94. 二叉树的中序遍历
执行用时 :0 ms, 在Binary Tree Inorder Traversal的C++提交中击败了100.00%的用户内存消耗 :10.8 MB, 在Binary Tree Inorder Traversal的C++提交中击败了8.14%的用户给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 /...原创 2019-06-08 10:37:53 · 168 阅读 · 0 评论 -
leetcode 152. 乘积最大子序列【动态规划】
执行用时 :4 ms, 在所有C++提交中击败了98.63%的用户内存消耗 :9.3 MB, 在所有C++提交中击败了9.54%的用户和最大连续子串,上升子串不同,这个题需要定义两个dp数组。分别存到目前为止最小/最大的值。这样的目的是:对于负数的乘积,当然是越小越好(这样绝对值越大)。对于正数的乘积,当然是越大越好。而每当遇到负数,则二者交换。以实现以i位置结尾,目前...原创 2019-06-13 19:10:44 · 364 阅读 · 0 评论 -
leetcode 102. 二叉树的层次遍历【queue实现BFS】
执行用时 :4 ms, 在所有C++提交中击败了99.43%的用户内存消耗 :13.9 MB, 在所有C++提交中击败了45.55%的用户关键: vector<vector<int>> ans; vector<int> tmp; int left=1,next=0;ans:答案tmp...原创 2019-06-10 15:44:10 · 411 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树【递归构造二叉树,以下标为传递对象】c++
执行用时 :20 ms, 在所有C++提交中击败了99.54%的用户内存消耗 :16.4 MB, 在所有C++提交中击败了91.80%的用户根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: ...原创 2019-06-10 16:56:02 · 368 阅读 · 0 评论 -
leetcode 287. 寻找重复数【鸽笼原理,O(1)空间复杂度解决问题、循环列表快慢指针找环问题】
给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。方法一:鸽笼原理因为在1~n的范围内最多只能放n个不同的数字,但现在数组放了n+1个数字,所以至少有一个重复。对于在1~n范围内的某个数字m,那么数组中小于等于m的数字最少有m个,并且刚好为m的时候,1~m之间不会...原创 2019-06-18 13:27:00 · 665 阅读 · 0 评论 -
leetcode 208. 实现 Trie (前缀树)【多叉树,前缀匹配】【代码很精炼】
说到前缀,说到树,自然想到set。set内部是红黑树,有自动排序二分查找的功能,查找时间复杂度可以降低到logn。但是。。。一个个录入会导致效率奇低,查找开销也大方法一:双set,一个存前缀,一个存全匹配。。额这效率执行用时 :552 ms, 在所有C++提交中击败了5.21%的用户内存消耗 :112.9 MB, 在所有C++提交中击败了5.14%的用户class T...原创 2019-06-17 22:52:52 · 757 阅读 · 0 评论 -
LeetCode 309. 最佳买卖股票时机含冷冻期:【一个很清晰的动态规划解题思路,状态机教程】
执行用时 :0 ms, 在所有C++提交中击败了100.00%的用户内存消耗 :8.9 MB, 在所有C++提交中击败了73.55%的用户问题来源题目来源链接见下方:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/问题简述:假如有一个 i...原创 2019-06-20 21:45:03 · 410 阅读 · 0 评论 -
leetcode 279. 完全平方数【动态规划 or 图论 】
给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.输入: n = 13输出: 2解释: 13 = 4 + 9.方法1:DP动态规划:执行用时 :160 ms, 在所有C++提交中击败了51.75%的用...原创 2019-06-16 21:23:32 · 448 阅读 · 0 评论 -
240. 搜索二维矩阵 II【想清楚再写。查找问题,已经有序考虑二分!】
方法一:【我的方法】以及好像看过类似的题,有印象。结果写了50分钟写出来个这么慢的。晕执行用时 :1044 ms, 在所有C++提交中击败了7.05%的用户内存消耗 :13.2 MB, 在所有C++提交中击败了5.06%的用户class Solution {public: bool searchMatrix(vector<vector<int>&g...原创 2019-06-16 20:21:16 · 2017 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积【简化计算,扩宽思维,动态规划也不是一步到位】
方法一:使用除法执行用时 :56 ms, 在所有C++提交中击败了95.06%的用户内存消耗 :12.4 MB, 在所有C++提交中击败了75.36%的用户class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<i...原创 2019-06-16 18:33:48 · 418 阅读 · 0 评论 -
一文解决动态规划构思问题
股票系列问题,只用一种通用方法解决所用问题,以不变应万变。这篇文章用状态机的技巧来解决,可以全部提交通过。不要觉得这个名词高大上,文学词汇而已,实际上就是 DP table,看一眼就明白了。先随便抽出一道题,看看别人的解法:int maxProfit(vector<int>& prices) { if(prices.empty()) return 0;...原创 2019-06-20 20:41:36 · 209 阅读 · 0 评论 -
leetcode 139. 单词拆分【记忆化搜索法进行回溯剪枝】
方法一:暴力dfs+回溯时间复杂度:O(n^n)。考虑最坏情况 ss =aaaaaaa 。每一个前缀都在字典中,此时回溯树的复杂度会达到 n^n空间复杂度:O(n)O(n) 。回溯树的深度最深达到 nn 。果不其然超时了class Solution {public: bool wordBreak(string s, vector<string>&a...原创 2019-06-10 20:20:39 · 803 阅读 · 0 评论 -
236. 二叉树的最近公共祖先【DFS找目标左右结点,找到即返回】
方法一:执行用时 :60 ms, 在所有C++提交中击败了10.44%的用户内存消耗 :33.9 MB, 在所有C++提交中击败了5.06%的用户这map是有多慢。。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...原创 2019-06-16 00:01:12 · 336 阅读 · 0 评论 -
leetcode 221. 最大正方形【动态规划+避免多余计算】
执行用时 :12 ms, 在所有C++提交中击败了100.00%的用户内存消耗 :10.7 MB, 在所有C++提交中击败了92.82%的用户 //动态规划问题 //看了题解才想出来。 //惭愧 //记录最大边长就行(避免多余的计算!!!!)设二维数组dp[m][n],其中dp[i][j]表示以坐...原创 2019-06-15 22:49:39 · 665 阅读 · 2 评论 -
leetcode 114. 二叉树展开为链表【前序遍历】
中文版执行用时 :12 ms, 在所有C++提交中击败了88.57%的用户内存消耗 :10.1 MB, 在所有C++提交中击败了71.67%的用户英文版Runtime:8 ms, faster than85.11%ofC++online submissions forFlatten Binary Tree to Linked List.Memory Usage:1...原创 2019-06-10 17:17:59 · 505 阅读 · 0 评论 -
leetcode 51. N皇后【模板题】
执行用时 :8 ms, 在N-Queens的C++提交中击败了98.14%的用户内存消耗 :10.8 MB, 在N-Queens的C++提交中击败了40.80%的用户N皇后经典问题【实在想不通为啥属于困难难度】关键思想:爆搜剪枝——因为事先知道不可能在同一行/列,所以也就没必要一个格子一个格子地搜索,可以直接以行或者列为单位进行搜索。判定语句:if(ans...原创 2019-06-07 21:16:34 · 212 阅读 · 0 评论 -
leetcode 688. “马”在棋盘上的概率【三维的动态规划】
执行用时 :16 ms, 在Knight Probability in Chessboard的C++提交中击败了85.98%的用户内存消耗 :10.5 MB, 在Knight Probability in Chessboard的C++提交中击败了76.67%的用户最开始想用两维度动态规划,把每个坐标的移动后位于棋盘内的“马”数量储存起来,奈何爆int了。(8^30,不爆才怪)...原创 2019-06-07 20:11:42 · 269 阅读 · 0 评论 -
leetcode 148. 排序链表【链表的归并排序】
在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。执行用时 :60 ms, 在所有C++提交中击败了98.21%的用户内存消耗 :13 MB, 在所有C++提交中击败了43.42%的用户技巧:看见nlogn的排序算法:归并排序 和 快排。又因为是链表,快排可能不行,所以要用归并。●对链表进行归并的思路:关键:需要及时断开链表成两部分,一直递归知道最后元素...原创 2019-06-13 15:17:01 · 155 阅读 · 0 评论 -
leetcode 142. 环形链表 II【哈希表】
方法一:无脑哈希表。一个map数组记录访问过的结点,每次遍历时判断是否访问过。若访问过则该处即为交点。时间复杂度:按道理是O(N),但是实际上map数组的存在使得时间复杂度变为O(N*LogN)->红黑树查找。执行用时 :28 ms, 在所有C++提交中击败了40.08%的用户内存消耗 :11.9 MB, 在所有C++提交中击败了7.80%的用户/** * Defin...原创 2019-06-13 09:20:20 · 283 阅读 · 0 评论 -
leetcode 11.盛水最多的容器 c++
方法1:暴力法。从前往后,每次检索 最长的区域*二者间最矮的高度。时间复杂度O(n^2)class Solution {public: int maxArea(vector<int>& height) { if(height.size()<=1) return 0; else{ int siz...原创 2019-05-01 10:39:45 · 287 阅读 · 0 评论 -
leetcode 5. 最长回文子串
class Solution {public: string longestPalindrome(string s) { const int len = s.size(); if(len <= 1)return s; int start, maxLen = 0; for(int i = 1; i < len; ...原创 2019-06-01 14:40:25 · 145 阅读 · 0 评论 -
leetcode 3.无重复字符的最长子串
我的代码:class Solution {public: int lengthOfLongestSubstring(string s) { int L=s.size(); if(L<=1) return L; map<char,int> m; int max=1; for(int...原创 2019-04-23 20:51:59 · 162 阅读 · 0 评论 -
leetcode 2. 两数相加
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode*...原创 2019-04-23 15:26:08 · 140 阅读 · 0 评论 -
leetcode 15三数之和
最开始的想法很简单,双指针遍历,查询,时间复杂度O(n^3),过不了最后几个案例。class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> kong; v...原创 2019-05-01 14:26:23 · 170 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合【不带标记的DFS-简单回溯】
执行用时 :4 ms, 在Letter Combinations of a Phone Number的C++提交中击败了96.68%的用户内存消耗 :8.8 MB, 在Letter Combinations of a Phone Number的C++提交中击败了28.24%的用户class Solution {public: vector<string>...原创 2019-06-01 13:52:25 · 222 阅读 · 0 评论 -
leetcode 19.删除链表的倒数第N个节点【三指针一遍遍历】
执行用时 :8 ms, 在Remove Nth Node From End of List的C++提交中击败了96.21%的用户内存消耗 :8.6 MB, 在Remove Nth Node From End of List的C++提交中击败了75.76%的用户需要pre,p,q三个指针。/** * Definition for singly-linked list. * ...原创 2019-06-01 14:29:56 · 165 阅读 · 0 评论 -
leetcode 56. 合并区间【不能在c++类中定义cmp】
方法一:O(nlogn)sort 函数的功能很易于扩展,我们可以给它一个比较函数,让它按我们希望的方式工作。 如果想要自定义比较函数,就像这样: bool less_int(int a,int b){ return b<a; }执行用时 :32 ms, 在Merge Intervals的C++提交中击败了62.40%的用户内...原创 2019-06-06 11:13:53 · 300 阅读 · 0 评论 -
leetcode 55. 跳跃游戏【超级重要啊!!!!!!!!】
想法一:递归:【第三次碰到了,。。。】结果万万没想到啊!!!!超时了class Solution {public: int ok=0; bool canJump(vector<int>& nums,int now=0) { //第三遍了啊!!! //加油 23:13 if(ok) return ...原创 2019-06-06 00:14:49 · 187 阅读 · 0 评论 -
leetcode 49. 字母异位词分组【标准化】
刚好今天看了算法竞赛里面的map标准化问题就碰到这题,运气也是挺好。做起来很舒服呀先排序,再比对。执行用时 :84 ms, 在Group Anagrams的C++提交中击败了63.50%的用户内存消耗 :20.1 MB, 在Group Anagrams的C++提交中击败了39.45%的用户class Solution {public: vector<v...原创 2019-06-05 22:50:18 · 120 阅读 · 0 评论 -
leetcode 22.括号生成【回溯】
对待这种问题,千万别暴力搜索,那样太笨了。方法一:执行用时 :20 ms, 在Generate Parentheses的C++提交中击败了67.40%的用户内存消耗 :18.9 MB, 在Generate Parentheses的C++提交中击败了14.83%的用户第一个想到的是回溯法。每一次判别就ok。挺简单的。但是时间消耗比较久。可能是没有剪枝导致的。但是这个方法是最...原创 2019-06-01 15:15:47 · 290 阅读 · 0 评论