LeetCode每日一题
假老练啊哦
男性最大的魅力是幽默
展开
-
152. 乘积最大子序列
给定一个整数数组 nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。链接:https://leetcode-cn.com/problems/maximum...原创 2020-02-13 17:04:04 · 307 阅读 · 0 评论 -
18.四数之和
给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...原创 2019-08-05 10:03:25 · 105 阅读 · 0 评论 -
29. 两数相除
题目链接:https://leetcode-cn.com/problems/divide-two-integers给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。示例1:输入: dividend = 10, divisor = 3输出: 3示例...原创 2019-10-31 14:12:39 · 142 阅读 · 0 评论 -
24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.迭代的方法:思考:给定链表的样子如下有时候需要在最前面建立一个dummy结点的原因是当原来的头结点发生了变换,比如被删除了,或者被交换位置了,就...原创 2019-04-24 15:25:21 · 3974 阅读 · 0 评论 -
48. 旋转图像
给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3...原创 2019-04-28 15:42:24 · 140 阅读 · 0 评论 -
39. 组合总和
给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所求解集为...原创 2019-04-26 16:37:04 · 103 阅读 · 0 评论 -
31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3→1,3,23,2,1→1,2,31,1,5→1,5,1解答:首先举个数字为例,68,如果我们想让他变大,肯定是6...原创 2019-04-25 21:09:04 · 133 阅读 · 0 评论 -
95/96不同的二叉搜索树I,II
96. 不同的二叉搜索树class Solution {public: int numTrees(int n) { if(n<1) return 0; vector<int> dp(n+1,0); dp[0] = 1; dp[1] = 1; for(int i = 2;i<=n...原创 2019-04-20 20:47:26 · 172 阅读 · 0 评论 -
12.整数转罗马数和13.罗马数转整数
12.整数转罗马数题目的给出了几种转换策略,以及在个位是4,6的时候有一些变换。首先一个整数num的范围是1~3999,数字的位数情况是:千位,百位,十位,个位。每一位的数字其实就有四种情况,以百位为例:[100,300] 是一类;400是一类;[500,800]是一类;900是一类整个算法上没什么特别困难的比较好理解,有个地方: res += roman[i] + ro...原创 2019-04-09 22:29:32 · 101 阅读 · 0 评论 -
二叉树的中序遍历(递归,迭代,Morris Traversal)
三种对应时间和空间复杂度1. Iterative way (stack). Time: O(n), Space: O(n). 2. Recursive solution. Time: O(n), Space: O(n). 3. Threaded tree (Morris). Time: O(n), Space: O(1).二叉树中序遍历给定一个二叉树,返回它的中序遍历。...原创 2019-04-14 14:46:40 · 896 阅读 · 0 评论 -
75. 颜色分类
给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。...原创 2019-04-30 09:56:28 · 352 阅读 · 0 评论 -
347. 前K个高频元素
给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(nlogn) ,n是...原创 2019-05-09 21:00:15 · 84 阅读 · 0 评论 -
LeetCode刷题【一】
292.Nim游戏思考:当石头数为:1,2,3时,你先手,拿1~3块石头。肯定能直接获胜。如果当石头数为4时,你有三种拿的可能1,2,3.此时剩余的为3,2,1.这时候你的朋友相当于是“场面上剩下1~3块石头,并且他先手”,那么这种情况你就肯定输了。同理,当5块石头时,你拿起1~3块,剩下的为4,3,2。刚刚已经讨论了场面剩下4块的时候,无论你怎么选都是输,那么对于你的朋友也是一样。当8块...原创 2019-01-26 10:06:43 · 510 阅读 · 0 评论 -
543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间的路径长度是...原创 2019-05-09 20:58:38 · 660 阅读 · 0 评论 -
169.求众数(摩尔投票法)
给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2哈希表的做法很简单,额外的空间复杂度为O(n),时间复杂度O(n);这里用摩尔投票法:摩尔投票法解求众数。做法:从第一...原创 2019-05-15 15:22:09 · 436 阅读 · 0 评论 -
437. 路径总和 III
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8...原创 2019-05-12 22:16:50 · 278 阅读 · 0 评论 -
把矩阵分割成N个小矩阵,并且指出原矩阵中某个元素在哪个小矩阵中
做题遇到的:LeetCode36.有效的数独问题描述就如下:本来是一个9*9的矩阵,如果现在按照3*3的划分,怎么判断原来矩阵中的某个元素在哪个小矩阵中?假设矩阵中某个元素是i行j列,那么对应的box_index = (3*(i/3)+j/3),i/3就知道该元素对应的矩阵是哪一行,再乘以3就知道他对应的行首小矩阵,然后加上j/3,就知道具体的某一个小矩阵。...原创 2019-05-30 16:13:50 · 707 阅读 · 0 评论 -
一定要注意代码中的==和=操作!
今天写LeetCode79. 单词搜索,一开始没注意题目的意思,想着用哈希表存储每个单词出现的次数,后来仔细审题才发现是连续的,立马就想到是回溯的路径搜索。然后代码也不怎么复杂,可是调试了N久!主要也是今天精神不太好!而且越调试心态越浮躁!都不是想解决问题想快点糊弄完了干别的去。 // visited[i][j] == true;//错误!注意=赋值操作和==关系运算操作! ...原创 2019-05-31 14:20:13 · 655 阅读 · 0 评论 -
233. 数字 1 的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。思路:统计出每一的位上1出现的个数,累加起来就是1出现的总个数。num = 31456现在统计百位上1出现的次数。将num分成两部分(根据百位),a = 314,b=56。此时a的个位是4(即...原创 2019-06-12 22:50:04 · 917 阅读 · 0 评论 -
LeetCode——树
104.二叉树的最大深度解题思路:采用递归来做,首先判断root是否为NULL,然后比较左右数的最大深度,较大的一个+1即可。 int maxDepth(TreeNode* root) { if(root== NULL) return 0; else return (max(maxDepth(...原创 2018-11-04 21:40:16 · 243 阅读 · 0 评论 -
9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文...原创 2019-04-05 22:21:30 · 113 阅读 · 0 评论 -
7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-03-16 11:51:31 · 104 阅读 · 0 评论 -
238. 除自身以外数组的乘积
思考:除自身之外,所有元素的乘积,一开始想到的是保存两个数组left和right,分别保存左侧/右侧元素的乘积,然后求某一位,只用求left[i+1] * right[i-1]乘积即可。后来发现对空间的利用率太低了,没必要所有都保存到两个数组之中;而且在边界条件的时候还要专门写出来判断。class Solution {public: vector<int> pro...原创 2019-02-25 22:12:21 · 136 阅读 · 0 评论 -
LeetCode46——全排列
思考:全排列的问题可以看做是一个递归来解决,[1,2,3]的数组组成全排列,可以想象提前抽出一个数字,然后剩下的n-1的数组完成全排列问题。用深度优先的方法,建立一个index数组,一开始都没有访问过,对于数组每个数字遍历,若访问过就跳过;否则就进行递归。递归回溯的时候要记得从temp_vec临时保存数组当中踢出刚刚添加的nums[i],并且把标记index[i] 置0。我还想到,这个类似...原创 2019-02-19 17:20:05 · 287 阅读 · 0 评论 -
15. 三数之和
给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得a + b + c =0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思考:题...原创 2019-02-28 16:14:29 · 185 阅读 · 0 评论 -
LeetCode997——找到小镇的法官
思考:做的时候感觉像要用图的知识,然后画了下几个结点,就发现条件信任对就是一个有向边,然后第一个条件法官不相信任何人,即出度为0;第二个条件,任何人都相信法官,所以法官的入度为n-1。初始化的时候,为了方便使得法官编号和数组号对应,所以多开辟了一个空间,数组号为0的不用存储。class Solution {public: int findJudge(int N, vector&...原创 2019-02-24 12:23:35 · 1019 阅读 · 0 评论 -
LeetCode59——螺旋矩阵II
思路:弄清楚正方形的四个边界在旋转填充的时候的变化。 一开始在左上角的初始位置,从左-->右的变化,此时横坐标不变,即为up,纵坐标从左 -->右, for(int j = left;j <= right;j++) vec[up][j] = num++;在变换完“左-->右”之后,下一次循环如图顺时针的变换,此时最上面的...原创 2019-02-18 21:14:43 · 231 阅读 · 0 评论 -
1. 两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]一开始想...原创 2019-02-27 20:36:14 · 95 阅读 · 0 评论 -
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?思考:和62.不同路径I一样,就是添加了一个判断条件,首先是最上面一排和最左边一排,如果遇到了石头,那么接下来的点肯定是到不了的了...原创 2019-02-27 14:59:22 · 715 阅读 · 1 评论 -
LeetCode148——排序链表
思考:提到O(nlogn)的时间复杂度进行排序首先就想到归并排序,但是空间复杂度不是O(n)吗?为什么是常熟级空间复杂度,常数级空间复杂度,指的是算法所需的额外存储空间与问题的输入规模无关。后来看到别人的博客:Sort List——经典(链表中的归并排序)“因为原来使用归并时,都是 O(N)的,需要复制出相等的空间来进行赋值归并。对于链表,实际上是可以实现常数空间占用的(链表的归并排序不需...原创 2019-02-23 11:43:26 · 1761 阅读 · 0 评论 -
11. 盛最多水的容器
思路:最初想到用动态规划做,想半天没想出来,然后觉得是一个区域内容纳最多的水,可以定义两个指针left和right,然后来计算区域内水量,两侧线段的高度会影响求解矩形区域的大小;并且举行区域的长度也会影响大小。所以从长度最大开始计算,首先left = 最左侧的垂线,right = 最右侧的垂线,计算一个矩形区域。然后,根据两侧线段的长短来变换left(right),短的一边总是向...原创 2019-02-26 09:52:48 · 142 阅读 · 0 评论 -
LeetCode236——二叉树最近祖先
思考:这个函数就是查找p,q两个节点的祖先,然后给了这棵树的root,1、它先进行判断,根节点是不是NULL;或者根节点是否是p|q,要是有一个是,那祖先就肯定是root2、它用了递归的思想去查找左右两个子树,因为pq的祖先要么在左边,要么就在右边,所以肯定能找到一个祖先。3、若找到的left 子树和right子树都有祖先,那肯定祖先就是root,因为他们俩共同祖先不会一会儿在左边一...原创 2019-02-20 21:21:32 · 587 阅读 · 0 评论 -
LeetCode89——格雷编码
思路:关键是搞清楚格雷编码的生成过程, G(i) = i ^ (i/2); 如 n = 3:格雷编码的长度为(1<<n),每一位上的值 = 当前位 异或 右移一位 G(0) = 000, G(1) = 1 ^ 0 = 001 ^ 000 = 001 G(2) = 2 ^ 1 = 010 ^ 001 = 011 ...原创 2019-02-21 09:12:07 · 176 阅读 · 0 评论 -
6. Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的...原创 2019-03-15 20:37:55 · 73 阅读 · 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]则中...原创 2019-03-15 19:11:05 · 9512 阅读 · 1 评论 -
2. 两数相加
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2019-03-07 19:08:03 · 93 阅读 · 0 评论 -
43. 字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。 num1和num...原创 2019-03-04 14:33:39 · 255 阅读 · 0 评论 -
54. 螺旋矩阵
给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]...原创 2019-03-06 20:20:11 · 181 阅读 · 0 评论 -
5. 最长回文子串
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思考:传统的验证回文串的方法就是两个两个的对称验证是否相等,那么对于找回文字串的问题,就要以每一个字符为中心,像两边扩散来寻找回文串。这个...原创 2019-03-15 20:53:44 · 111 阅读 · 0 评论 -
16. 最接近的三数之和
给定一个包括n个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思考:和15.三数之和一样,双指...原创 2019-03-03 16:20:19 · 235 阅读 · 0 评论