![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode题
文章平均质量分 55
Gunther17
我很菜
展开
-
[笔试题]找数组中最长和为0连续子序列
1、暴力求解法很容易想到,用两个下标i,j来遍历数组,然后将i和j之间的元素求和,这样的方法比较简单,因为下标i和j都遍历了数组,所以时间复杂度有O(n2)O(n^2)O(n2),加上求和,所以总的时间复杂度是O(n3)O(n^3)O(n3),而空间存储只需要保留i和j还有一个最大长度的变量,所以空间复杂度为O(1)O(1)O(1).2、动态规划法上面方法耗时主要在求和,如果可以将部分求和的...原创 2019-03-21 17:52:25 · 2202 阅读 · 0 评论 -
43. 字符串相乘
这题主要考察大数.当然,大数操作基本就是两个字符串的操作了[1].分析:由于num1和num2的长度小于110,所以不能利用int,long等整型数据的*运算,因为肯定会超出其所能表示的范围。既然不能将其转为整数相乘,让我们可以怎么做呢?对了,我们可以用小学时学的乘法运算竖式来计算.[2]既然我们我们已经理清了解题思路,那你还需要了解一个数学知识,那就是m位数乘以n位数,结果最多为m+n位数...原创 2019-01-09 11:00:28 · 1454 阅读 · 1 评论 -
88. 合并两个有序数组
88. 合并两个有序数组4 ms:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i =m; int j=0; while(j<n)...原创 2019-01-19 20:44:22 · 813 阅读 · 0 评论 -
98. 验证二叉搜索树
98. 验证二叉搜索树分析这道验证二叉搜索树有很多种解法,可以利用它本身的性质来做,即左<根<右,也可以通过利用中序遍历结果为有序数列来做,下面我们先来看最简单的一种,就是利用其本身性质来做,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件,代码如下:递归的:class Solution { public:...原创 2019-01-24 16:36:12 · 165 阅读 · 0 评论 -
87. 扰乱字符串
87. 扰乱字符串简单的说,就是s1和s2是scramble的话,那么必然存在一个在s1上的长度l1,将s1分成s11和s12两段,同样有s21和s22.那么要么s11和s21是scramble的并且s12和s22是scramble的;要么s11和s22是scramble的并且s12和s21是scramble的。hard.4ms 暴力递归ac。class Solution { publi...原创 2019-01-19 14:48:22 · 486 阅读 · 0 评论 -
96. 不同的二叉搜索树/95. 不同的二叉搜索树II
95. 不同的二叉搜索树II给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:正好按照顺序,左边比i小,右边比i大。划分左右子树,递...原创 2019-01-24 13:25:37 · 341 阅读 · 0 评论 -
86. 分隔链表
86. 分隔链表[1]思路:从前向后遍历链表,将结点值小于 x 的结点放入到新链表 1 中,将结点值大于等于 x 的结点放入新链表 2 中。最后,将新链表 2 拼接在新链表 1 后面即可。注意的几点:常见的 ListNode *pHead=new ListNode(0);//新建辅助节点收尾操作 置空4ms: class Solution { public: ListNode...原创 2019-01-19 10:42:23 · 195 阅读 · 0 评论 -
85. 最大矩形
85. 最大矩形hard[1]分析:此题是之前那道的 84.直方图中最大的矩形 的扩展,这道题的二维矩阵每一层向上都可以看做一个直方图,输入矩阵有多少行,就可以形成多少个直方图,对每个直方图都调用 84.直方图中最大的矩形 中的方法,就可以得到最大的矩形面积。那么这道题唯一要做的就是将每一层构成直方图,由于题目限定了输入矩阵的字符只有 ‘0’ 和 ‘1’ 两种,所以处理起来也相对简单。方法...原创 2019-01-18 23:10:17 · 128 阅读 · 0 评论 -
84.直方图中最大的矩形
直方图中最大的矩形分析:遍历数组,每找到一个局部峰值,然后向前遍历所有的值,算出共同的矩形面积,每次对比保留最大值,代码如下:class Solution { public: int largestRectangleArea(vector<int> &height) { int res = 0; for (int i = 0; i < heig...原创 2019-01-18 22:41:09 · 567 阅读 · 0 评论 -
62.不同路径/63. 不同路径 II/64. 最小路径和
62.不同路径Title:有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。问有多少条不同的路径?注意事项n和m均不超过100Analysis:典型的动态规划问题容易分析出状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1];初...原创 2019-01-13 22:34:49 · 160 阅读 · 0 评论 -
61. 旋转链表
第一次写出提交这么慢的code 5232ms: class Solution { public: //利用相隔k的两个指针 ListNode* rotateRight(ListNode* head, int k) { if (head == nullptr||k&lt;0)return nullptr; int kStep = 0; ListNode *p...原创 2019-01-13 20:17:06 · 120 阅读 · 0 评论 -
94. 二叉树的中序遍历/144. 二叉树的前序遍历/145. 二叉树的后序遍历
94. 二叉树的中序遍历递归版本 class Solution { public: vector&amp;lt;int&amp;gt;res; vector&amp;lt;int&amp;gt; inorderTraversal(TreeNode* root) { if(root==nullptr) return res; inorderTraversal(root-&amp;gt;le原创 2019-01-23 23:58:46 · 189 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II/83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 II示例 1:输入: 1->1->2输出: 2直接写过这题 在剑指offer,详细解释 class Solution { public: //新建一个头节点,两个辅助指针 ListNode* deleteDuplicates(ListNode* head) { ListNode *p = new ListNode(0...原创 2019-01-18 17:27:45 · 148 阅读 · 0 评论 -
93. 复原IP地址
93. 复原IP地址分析:为便于使用,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数。所以说IP地址总共有四段,每一段可能有一位,两位或者三位,范围是[0, 255],题目明确指出输入字符串只含有数字,所以当某段是三位时,我们要判断其是否越界(>255),还有一点很重要的是,当只有一位时,0可以成某一段,如果有两位或三位时,像 00, 01, 00...原创 2019-01-23 19:53:08 · 195 阅读 · 0 评论 -
LeetCode 39. 组合总和/40. 组合总和 II
39. 组合总和示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入: candidates = [2,3,5], target = 8,所求解集为:[[2,2,2,2],[2,3,3],[3,5]]分析[1]:考虑用回溯法解题。首先将数组从小到大排序,然后从第一个数字开始遍历...原创 2019-01-07 22:29:03 · 207 阅读 · 0 评论 -
60.Permutation Sequence 序列排序
class Solution {public: string getPermutation(int n, int k) { string ret; vector&amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;gt; factorial(n,1); vector&amp;amp;amp;amp;amp;lt;char&amp;amp原创 2019-01-12 21:56:00 · 194 阅读 · 0 评论 -
89. 格雷编码
摘自[1][2][3]:G:格雷码 B:二进制码 n:正在计算的位根据格雷码的定义可得:G(n) = B(n+1) XOR B(n)AC code:// Binary to grey code class Solution { public: vector<int> grayCode(int n) { vector<int>res; for ...原创 2019-01-19 22:20:09 · 565 阅读 · 0 评论 -
46. 全排列/47. 全排列II
这题和之前做的剑指offer上的字符串全排列。一样。分析[1]:如果原始要排列的数组顺序为1、2、3、4,现在只要分别交换1、2,1、3,1、4然后对剩下的3个元素进行递归的排列。自己的code:100%class Solution { public: vector&amp;amp;amp;amp;lt;vector&amp;amp;amp;amp;lt;int&amp;amp;amp;amp;gt;&amp;amp;原创 2019-01-09 13:41:21 · 298 阅读 · 0 评论 -
100. 相同的树
100. 相同的树class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { if (p == nullptr&&q == nullptr)return true; if ((!p&&q)||(!q&&p)||(q->val != p->va...原创 2019-01-25 00:10:07 · 124 阅读 · 0 评论 -
寻找和为定值的多个数
题目:输入两个整数 n 和 m,从数列1,2,3…n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。code: 1 #include&lt;list&gt; 2 #include&lt;iostream&gt; 3 using namespace std; 4 5 list&lt;int&gt;list1; 6 void find_fact.原创 2019-02-25 20:20:45 · 540 阅读 · 0 评论 -
寻找两个字符串间的相同子串c++
寻找两个字符串间的相同子串c++://思路:动态规划经典问题,加一个start标记即可,注意将较短子串最先出现的那个输出#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;string&gt;using namespace std;void findMaxCommonStr(string s1,string s2){原创 2019-02-25 12:47:24 · 7657 阅读 · 0 评论 -
leetcode300 最长上升子序列
广场上站着一支队伍,她们是来自全国各地的扭秧歌代表队,现在有她们的身高数据,请你帮忙找出身高依次递增的子序列。 例如队伍的身高数据是(1、7、3、5、9、4、8),其中依次递增的子序列有(1、7),(1、3、5、9),(1、3、4、8)等,其中最长的长度为4。输入描述:输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000)。紧接着第二行包含n个正整数m(1≤n≤10000),代...原创 2019-02-28 19:46:00 · 228 阅读 · 0 评论 -
二维数组的查找,74. 搜索二维矩阵/240. 搜索二维矩阵 II
74. 搜索二维矩阵/二维数组的查找 class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty())return false; //二分查找从左下角或右上角 int m = matrix...原创 2019-01-16 22:57:45 · 232 阅读 · 0 评论 -
73. 矩阵置零
方法1:赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零。额外空间为O(m∗n)O(m*n)O(m∗n).方法2:两个数组,bool[m] 和 bool[n] 分别存某行有零,后者某列有零。之后根据数组值将原矩阵相应位置置零。额外空间O(m+n)O(m + n)O(m+n)。方法3:看来许久才明白。先对矩阵进行扫描,标记要进行置0的行和列,对要进行置0的行进行标。同时...原创 2019-01-16 21:36:56 · 252 阅读 · 0 评论 -
92. 反转链表 II
就用1,2,3,4,5 画个图就行。class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if (m &gt; n || m &lt; 0)return nullptr; ListNode *dummy = new ListNode(0); dummy-&gt;next =...原创 2019-01-21 20:58:04 · 176 阅读 · 0 评论 -
71. 简化路径
71. 简化路径总结出规律:这样我们就可以知道中间是"."的情况直接去掉,是"…"时删掉它上面挨着的一个路径,而下面的边界条件给的一些情况中可以得知,如果是空的话返回"/",如果有多个"/"只保留一个。那么我们可以把路径看做是由一个或多个"/"分割开的众多子字符串,把它们分别提取出来一一处理即可,class Solution { public: string simplif...原创 2019-01-16 11:03:20 · 137 阅读 · 0 评论 -
跳台阶/70. 爬楼梯/变态跳台阶
跳台阶/70. 爬楼梯class Solution {public: int jumpFloor(int number) { if(number==0) return 0; if(number==1) return 1; if(number==2) return 2; int f1=1; int f2=2;...原创 2019-01-15 21:46:39 · 477 阅读 · 0 评论 -
69. x 的平方根
69. x 的平方根官网上Ac,并不是考察点。 class Solution { public: int mySqrt(int x) { return sqrt(x); } };二分法分析:对于一个非负数n,它的平方根不会大于(n/2+1),画个图y=xy=\sqrt{x}y=x和y=12xy=\frac{1}{2}xy=21x就知道切点是(1,1)。在[0, n/...原创 2019-01-15 20:52:44 · 281 阅读 · 0 评论 -
91. 解码方法
91. 解码方法题目:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “B...原创 2019-01-21 15:00:16 · 810 阅读 · 0 评论 -
50. Pow(x, n)官方的测试用例有坑
首先我想说这题太坑了,如果你先判断是奇数不是偶数,对不起通过不了。AC: class Solution { public: double ExponentUnsignRes(double base, int n) { if (n == 0)return 1.0; if (n == 1)return base; double res = ExponentUnsignR...原创 2019-01-10 10:28:12 · 140 阅读 · 0 评论 -
49.字母异位词分组
学习unordered_map[1]// C++ program to demonstrate functionality of unordered_map #include <iostream> #include <unordered_map> using namespace std; int main() { // Declaring umap to ...原创 2019-01-09 22:08:58 · 208 阅读 · 0 评论 -
66.加一/67.二进制求和
解析:两种方法都有就是在数组必要时(如999)进行插入操作。方法一: class Solution { public: vector&amp;amp;lt;int&amp;amp;gt; plusOne(vector&amp;amp;lt;int&amp;amp;gt;&amp;amp;amp; digits) { for (int i = digits.size() - 1; i &a原创 2019-01-15 15:57:00 · 227 阅读 · 0 评论 -
65. 有效数字
65. 有效数字 class Solution { public: //考察全面性 bool isNumber(string s) { int len = s.length(); if (len == 0)return false; int i = 0; while (i < len&&s[i] == ' ')i++;//skip ...原创 2019-01-15 14:03:55 · 325 阅读 · 0 评论 -
48. 旋转图像
class Solution { public: //画个图我发现一步很难实现,那我就拆成两步 void rotate(vector<vector<int>>& matrix) { if (matrix.empty())return; int row = matrix.size(); int col = matrix[0].size()...原创 2019-01-09 18:51:36 · 100 阅读 · 0 评论 -
矩阵中的路径/79. 单词搜索
回溯法class Solution {public: bool hasPath(char* matrix, int rows, int cols, char* str) { if (!matrix || rows &amp;amp;lt;= 0 || cols &amp;amp;lt;= 0 || !str)return false; int *visited = new int[rows*cols]; me...原创 2019-01-17 22:45:04 · 340 阅读 · 1 评论 -
38. 报数
签到题100%AC class Solution { public: string countAndSay(int n) { string res = ""; if (n < 1)return res; res = "1"; for (int i = 0; i < n-1; i++) { string Stemple = ""; ...原创 2019-01-07 15:25:36 · 88 阅读 · 0 评论 -
77. 组合/78.子集/90. 子集 II
77. 组合 class Solution { public: void help(vector&amp;amp;amp;amp;amp;amp;amp;amp;lt;vector&amp;amp;amp;amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;a原创 2019-01-17 15:21:33 · 233 阅读 · 0 评论 -
6.Z字形变换
将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:P A H NA P L S I I GY I R之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"示例1:输入: s = "PAYPALISHIRING", numRows = 3输出: "PAHNAPLSIIGYIR"示例 2:输入: s ...原创 2018-10-18 22:28:00 · 140 阅读 · 0 评论 -
5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解法一:暴力解法时间复杂度两个for循环,一个判断是否为回文的函数解法二:中心扩展解法时间复杂度,空间复杂度c++ code:#i...原创 2018-10-17 14:43:00 · 187 阅读 · 0 评论 -
4. 两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为O(log (m+n)) 。你可以假设 nums1 和 nums2 不同时为空。示例1:nums1=[1,3]nums2=[2]中位数是 2.0示例2:nums1 = [1, 2]nums2 = [3, 4]中位数是 (2 + 3)/2 = 2.5...原创 2018-10-12 09:16:00 · 91 阅读 · 0 评论