LeetCode
文章平均质量分 91
TdOooonline
这个作者很懒,什么都没留下…
展开
-
Leetcode 115. 不同的子序列 降低空间复杂度的解法
题目 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是) 题目数据保证答案符合 32 位带符号整数范围示例1输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。rabbbitrabbbit原创 2022-01-02 14:40:40 · 812 阅读 · 0 评论 -
2020-06-11 LeetCode 739 每日温度 C++
题目:739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。 这几天我要光明正大咕咕咕原创 2020-06-11 10:57:30 · 262 阅读 · 0 评论 -
2020-06-10 LeetCode 9 回文数 C++
题目:9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶: 你能不将整数转为字符串来解决这个问题吗? 思路:这道题一看提交记录两年前做过。。。转字符串的方原创 2020-06-10 09:42:43 · 166 阅读 · 0 评论 -
2020-06-09 LeetCode 面试题46 把数字翻译成字符串 C++
题目:面试题46. 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"提示: 0 <= num < 2312^{31}231原创 2020-06-09 09:54:45 · 201 阅读 · 0 评论 -
2020-06-08 LeetCode 990 等式方程的可满足性 C++
题目:990. 等式方程的可满足性 给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。 只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。示例1:输入:["a==b","b!=a"]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无法满原创 2020-06-08 10:27:41 · 257 阅读 · 0 评论 -
2020-06-06 LeetCode 128 最长连续数列 C++
题目:128. 最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 时间复杂度为O(n),排序算法排除,第一时间想到的就是HashMap,c++里边的map就是有序表,把所有元素都插进去之后自然是有序的,然后在再遍历有序表看最长连续是多少就比较简单了,时间上需要遍历一次数组和Map,复杂度为O(n),空间复杂度原创 2020-06-06 11:01:40 · 253 阅读 · 0 评论 -
2020-06-05 LeetCode 面试题29 顺时针打印矩阵 C++
题目:面试题29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i]原创 2020-06-05 11:44:11 · 198 阅读 · 0 评论 -
2020-06-04 LeetCode 238 除自身以外数组的乘积 C++
题目:238. 除自身以外数组的乘积 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请**不要使用除法,**且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题原创 2020-06-04 10:24:40 · 178 阅读 · 0 评论 -
2020-06-03 LeetCode 837 新21点 C++
题目: 爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。 当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例1:输入:N = 10, K = 1, W = 10输出:1.00000说明:爱丽丝得到一张卡,然后停止。示例2:输入:N = 6原创 2020-06-03 20:43:44 · 177 阅读 · 0 评论 -
2020-06-02 LeetCode 16 最接近的三数之和 C++
题目:面试题64. 求1+2+…+n 今天每日一题之前不久之前就做过,当时花了一整个下午,印象贼深,思路如下:https://blog.csdn.net/qq_40405705/article/details/105903614 然后做了另外一道,16. 最接近的三数之和题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2原创 2020-06-02 10:19:35 · 184 阅读 · 0 评论 -
2020-06-01 LeetCode 1431 拥有最多糖果的孩子&& 43 字符串相乘 C++
题目: 给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。 对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。示例1输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true] 解释:孩子 1 有 2 个糖原创 2020-06-01 10:56:09 · 166 阅读 · 0 评论 -
2020-05-31 LeetCode 101 对称二叉树 C++
题目: 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。示例: 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶: 你可以运用递归和迭代两种方法解决这个问题吗? 题目比较简单,尤其是递归,对于对称的两个节点t1,t2主要需要比较三个值:t1与t2节点的原创 2020-05-31 10:37:48 · 151 阅读 · 0 评论 -
LeetCode 20 有效的括号 C++
今天脑子不是好使,每日一题就想到了暴力解法,官方题解没看懂,不是很熟悉C++的栈咋写,所以先放这了偷个懒,把之前栈的题目复习了一下。题目: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输原创 2020-05-30 11:26:09 · 206 阅读 · 0 评论 -
2020-05-29 LeetCode 198 打家劫舍 C++
题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例2原创 2020-05-29 10:05:23 · 206 阅读 · 0 评论 -
2020-05-28 LeetCode 394 字符串解码 C++
题目: 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例:s = "3[a]2[bc]", 返回 "aaabcbc".s = "3[a2原创 2020-05-28 11:24:56 · 240 阅读 · 0 评论 -
2020-05-27 LeetCode 974 和可被 K 整除的子数组 C
题目:和可被 K 整除的子数组 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例:输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]提示:1 <= A.length <= 30000-10000 <=原创 2020-05-27 11:00:40 · 219 阅读 · 0 评论 -
2020-05-26 LeetCode 287 寻找重复数 C
题目: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例1:输入: [1,3,4,2,2]输出: 2示例2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于O(n2)O(n^2)O(n2)。数组中只有一个重复的数字,但它可能不止重复出现一次。题目本身不难,解法太多了,难原创 2020-05-26 13:00:54 · 180 阅读 · 0 评论 -
LeetCode 28 实现strStr C
今天的每日一题是道设计题,不是很喜欢这种题目,复现太费事了。这里把思路理清了我就没写了,这里么埋个坑,以后有时间补上。看到O(1)就知道一定是用HashMap的,然后LRU的删除机制需要把数据动态更新,这样用双向链表最好,每次get或者put的时候都放到头节点上,如果超出容量,就删除双向链表的尾节点。 思路想出来没用多久,然后刚好把之前KMP的坑给埋了。题目:实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 need原创 2020-05-25 11:04:27 · 155 阅读 · 0 评论 -
2020-05-24 LeetCode 4 寻找两个正序数组的中位数 C
题目: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。示例1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例2nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5 今天又是道硬菜,这个题我很清楚的记得去年暑假夏令营的时候做过,来原创 2020-05-24 12:36:42 · 639 阅读 · 0 评论 -
2020-05-23 LeetCode 76 最小覆盖子串 Java
题目: 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。 前两天准备答辩的事情,加上两道题目自己刚好做过,所以又咕咕了两天,以后把博客补上,那个啥马拉车算法一直不是很懂。 今天的题也是没自己做出来,看了提示一之后知道用滑动窗口解,最开始用的是原创 2020-05-23 23:08:24 · 135 阅读 · 0 评论 -
2020-05-20 LeetCode 1371 每个元音包含偶数次的最长子字符串 Java
题目: 给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即’a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。示例1:输入:s = "eleetminicoworoep"输出:13解释:最长子字符串是 "leetminicowor" ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。示例2:输入:s = "leetcodeisgreat"输出:5解释:最长子字符串是 "leetc" ,其中包含 2 个 e 。示例3:输入:原创 2020-05-20 10:28:14 · 427 阅读 · 0 评论 -
2020-05-19 LeetCode 680 验证回文字符串2 c
题目: 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例1:输入: "aba"输出: True示例2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 题目其实挺简单的,一开始去想符合题目要求的字符串有啥规律,走了些弯路,后面发现其实直接遍历就好了,遇到不满足回文条件的就检测是删除左边的还是删除右边的能符合条件,时间复杂度也就O(n)。 代码实现的时候出了点错误,最原创 2020-05-19 10:33:39 · 160 阅读 · 0 评论 -
2020-05-18 LeetCode 152 乘积最大子数组 c
题目:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 电脑终于修好了,niiiiiiice 这道题一开始是没有任何思路的,然后去把相关题目"最大子序和"、“除自身意外的数组的乘积”、”打家劫舍“、”三个数的最大乘积“原创 2020-05-18 11:52:21 · 144 阅读 · 0 评论 -
2020-05-17 LeetCode 210 课程表2
题目: 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]] 输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序原创 2020-05-17 20:55:27 · 117 阅读 · 0 评论 -
2020-05-15 LeetCode 560 和为k的子数组 Java
题目: 给定一个整数数组和一个整数 **k,**你需要找到该数组中和为 k 的连续的子数组的个数。示例1:输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明:数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。 题目与之前两数之和、连续子数组和之类的题目比较像,因为这里考察的是连续数组,就联想到可以分别对数组进行遍历累加,下标i对应的值记录的是原创 2020-05-15 12:47:09 · 136 阅读 · 0 评论 -
2020-05-14 LeetCode 136 只出现一次的数字
题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4 这道题很久之前做过,当时的思路还记得,因为数都是成对出现的,只有一个元素只出现一次,线性时间复杂度就是只遍历一次或者几次,不使用额外空间也就是在原数组上做操作,要符合这样的条件基本就得找到一个运算规律能够删除重复元素原创 2020-05-14 10:28:13 · 126 阅读 · 0 评论 -
2020-05-13 LeetCode 102 二叉树的层序遍历
题目: 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回层次遍历结果[ [3], [9,20], [15,7]] 2333,这道题之前做二叉树最近公共祖先的时候给顺便做了,题目也是比较基础的二叉树遍历问题,因为是层序遍历必须是存储当前层的每个节点,当时想了就是通过队列来实现每一层节点的更换原创 2020-05-13 10:10:53 · 134 阅读 · 0 评论 -
2020-05-12 LeetCode 115 最小栈
题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,原创 2020-05-12 10:59:11 · 103 阅读 · 0 评论 -
2020-05-11 LeetCode 50 Pow(x,n)
题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。 受之前受之前69题官方题解一的启示,就直接写了个exp+log实现的数学方法,也就是xn可以写成elnxx^n可以写成e^{lnx}xn可以写成elnx 需要原创 2020-05-11 15:12:56 · 134 阅读 · 0 评论 -
2020-05-10 LeetCode 236 二叉树的最近公共祖先
题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:原创 2020-05-10 14:12:53 · 173 阅读 · 0 评论 -
2020-05-09 LeetCode 69 x的平方根
前几天因为忙着保研的事项所以只是做了题但没写博客,现在虽然还没忙完但是还是立个Flag以后每天一篇吧,因为本人也不是科班出身所以很多解释都不是特别专业,主要还是记录自己的思路。题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例1输入: 4输出: 2示例2输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被原创 2020-05-09 12:01:56 · 122 阅读 · 0 评论 -
2020-05-04 LeetCode 45 跳跃游戏2
题目:给定一个非负整数数组,你最初位于数组的第一个位置,数组中的每个元素代表你在该位置可以跳跃的最大长度,你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 **说明:**假设你...原创 2020-05-04 12:13:39 · 136 阅读 · 0 评论 -
2020-05-03 LeetCode 53 最大子序和 题解
题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 看到题目第一想法是双指针,但是在推算指针移动规律后是一个标准的动态规划题。题目要求一个最大和的连续子数组,设置变量当前最大连续子...原创 2020-05-03 15:00:09 · 106 阅读 · 0 评论 -
LeetCode 面试题64 求1+2+3+ ...+ n 题解
题目:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000 观察题目:不能使用乘除法、for、while、if、else、switch、case等...原创 2020-05-03 14:58:08 · 775 阅读 · 0 评论 -
LeetCode 17 电话号码的字母组合
题目:题解入手第一反应就是遍历,然后想到递归,方法大同小异,考虑到LeetCode将这个题目定义为中等难度,想到这个题目应该要从细节上来优化,比如内存空间的分配,深度优先广度优先等,在评论区找到一个特别好的算法,如下private static List<String> letterCombinations(String digits) { LinkedLis...原创 2019-10-09 16:53:11 · 144 阅读 · 0 评论 -
LeetCode 10 Z字变换
拿到题目的后最容易想到就是先转换成Z字型再添加,此种方法不做赘述,效率一般。其次能够想到利用数学规律来当索引直接变换,一般规律如下易得有n行,m个z时字符串长度为(2n-2)m+n,其中有第一行与最后一行只有m+1个,其他为2*m+1个 每一行第一列均有且只有一个 第二行到第n-1行的非首列(第i行第j列)后的每两个数字,都相对(2n-2)*j+1对称,分别为(2n-2)*j+...原创 2019-08-12 17:12:48 · 168 阅读 · 0 评论 -
LeetCode 15 三数之和
首先很容易想到的是三层循环遍历,时间复杂度o(n^3),但是会超时,然后一般能想到的是通过排序来优化,排序的复杂度为o(nlogn),然后通过双指针遍历,总体复杂度为o(n^2),但是在实现上有很多细节可以优化,三个指针从左到右为k,i,j,升序排列为例,有1.当nums[k]>0时,跳过k,因为nums[j]>nums[i]>nums[k]>0,三者相加必大于零...原创 2019-08-12 12:29:42 · 121 阅读 · 0 评论