刷题
文章平均质量分 56
刷题leetcode
StudyWinter
持续学习
展开
-
【算法】二叉搜索树的插入、删除、转换操作
对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。如果前一个节点小于当前节点,则将插入数据放到前一个节点的右子树上;二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。如果前一个节点大于当前节点,则将插入数据放到前一个节点的左子树上;另一个正确答案是 [5,2,6,null,4,null,7]。原创 2024-02-29 08:28:47 · 957 阅读 · 0 评论 -
【LeetCode刷题】146. LRU 缓存
(a)如果 key 不存在,使用 key 和 value 创建一个新的节点,在双向链表的头部添加该节点,并将 key 和该节点添加进哈希表中。然后判断双向链表的节点数是否超出容量,如果超出容量,则删除双向链表的尾部节点,并删除哈希表中对应的项;通过哈希表定位到该节点在双向链表中的位置,并将其移动到双向链表的头部,最后返回该节点的值。(b)如果 key 存在,则与 get 操作类似,先通过哈希表定位,再将对应的节点的值更新为 value,并将该节点移到双向链表的头部。// 缓存是 {1=1, 2=2}原创 2024-02-27 22:11:00 · 1230 阅读 · 0 评论 -
【算法】151. 反转字符串中的单词
给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。解决这道题,思路可分三步步骤一:删除字符串中的多余空格(前导空格、单词间的多个空格、尾随空格);步骤二:反转整个字符串;步骤三:反转字符串里面的单词。原创 2023-03-03 10:07:37 · 874 阅读 · 1 评论 -
二叉搜索树的遍历
在处理二叉搜索树时,我们第一时间想到的是中序遍历得到有序数组,然后再根据需求处理,其实也可以在中序遍历时就处理。直接中序遍历生成数组,再判断数组是否有序即可。也可以直接在中序遍历时处理。......原创 2022-08-15 15:34:50 · 496 阅读 · 0 评论 -
【算法】买股票系列
leetcode上有【买股票】的题很有意思,基本上也采用动态规划去做,今天总结一下。在309. 最佳买卖股票时机含冷冻期解答中汇总了题目汇总了所有的买股票问题:力扣1、121 买股票的最佳时机链接:力扣给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润..原创 2022-05-04 18:57:14 · 1548 阅读 · 0 评论 -
【背包问题】爬楼梯
今天看到对爬楼梯问题有意思的解法力扣链接:力扣这道题和斐波那契数一样,都很经典。解法1常规的解法,写个递归,不过这个在力扣会超时,放上代码class Solution {public: int climbStairs(int n) { if (n <= 2) { return n; } return climbStairs(n - 1) + climbStairs(n - 2); }};原创 2022-04-21 09:29:24 · 1244 阅读 · 0 评论 -
取出现次数最多的最大值和出现次数最少的最小值
给定一组整型数据,找出其中出现次数最多的数据,如果出现次数最多的整数不唯一,则找出最大的数据,记为M。找出其中出现次数最少的数据,如果出现次数最少的整数不唯一,则找出最小的数据,记为N。最后求解M-N。放上写的很low的c++代码#include <iostream>#include <vector>#include <map>#include <algorithm>using namespace std;void test原创 2022-04-12 22:14:34 · 1669 阅读 · 0 评论 -
【LeetCode刷题】12. 整数转罗马数字
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。...原创 2021-05-14 09:03:29 · 129 阅读 · 0 评论 -
【LeetCode刷题】783. 二叉搜索树节点最小距离
给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。注意:本题与 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同示例 1:输入:root = [4,2,6,1,3]输出:1示例 2:输入:root = [1,0,48,null,null,12,49]输出:1===================================...原创 2021-04-13 12:45:41 · 256 阅读 · 0 评论 -
【LeetCode刷题】179. 最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例2:输入:nums = [3,30,34,5,9]输出:"9534330"示例 3:输入:nums = [1]输出:"1"示例 4:输入:nums = [10]输出:"10"1、现将int转换成string;2、按照题目.原创 2021-04-12 16:52:58 · 260 阅读 · 0 评论 -
【LeetCode刷题】263. 丑数
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数2、3 和/或5的正整数。示例 1:输入:n = 6输出:true解释:6 = 2 × 3示例 2:输入:n = 8输出:true解释:8 = 2 × 2 × 2示例 3:输入:n = 14输出:false解释:14 不是丑数,因为它包含了另外一个质因数7 。示例 4:输入:n = 1输出:true...原创 2021-04-10 09:52:45 · 1455 阅读 · 0 评论 -
【LeetCode刷题】154. 寻找旋转排序数组中的最小值 II
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。给你一个可能存在 重复 元素值的数原创 2021-04-09 08:29:28 · 122 阅读 · 0 评论 -
【LeetCode刷题】81. 搜索旋转排序数组 II
已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4]原创 2021-04-07 19:37:51 · 176 阅读 · 0 评论 -
【LeetCode刷题】80. 删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplic原创 2021-04-06 14:34:31 · 581 阅读 · 0 评论 -
【LeetCode刷题】1143. 最长公共子序列
给定两个字符串text1 和text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = "abcde", text2 = ...原创 2021-04-05 16:27:54 · 152 阅读 · 0 评论 -
【LeetCode刷题】面试题 17.21. 直方图的水量
给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6分析:核心精神:总体积减去柱子体积就是水的容量(1)利用左右指针的下标差值计算出每一层雨水和柱子的体积。如下图,第一层体积为11,.原创 2021-04-02 22:56:39 · 260 阅读 · 0 评论 -
【LeetCode刷题】90. 子集 II
今天的题不会https://leetcode-cn.com/problems/subsets-ii/原创 2021-03-31 16:50:45 · 103 阅读 · 0 评论 -
【LeetCode刷题】74. 搜索二维矩阵
编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false..原创 2021-03-30 09:01:11 · 153 阅读 · 0 评论 -
【LeetCode刷题】190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。进阶:如果多次调用这个函数,你将如何优化你的算法?示例 1:输入:...原创 2021-03-29 16:37:11 · 97 阅读 · 0 评论 -
【LeetCode刷题】61. 旋转链表
给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2021-03-27 15:19:14 · 175 阅读 · 0 评论 -
【LeetCode刷题】83. 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列/** * Definition for singly-l原创 2021-03-26 10:33:14 · 182 阅读 · 0 评论 -
【LeetCode刷题】69. x 的平方根
实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。=================================================================================...原创 2021-01-08 22:36:35 · 130 阅读 · 1 评论 -
【LeetCode刷题】537. 复数乘法
给定两个表示复数的字符串。返回表示它们乘积的字符串。注意,根据定义 i2= -1 。示例 1:输入: "1+1i", "1+1i"输出: "0+2i"解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。示例 2:输入: "1+-1i", "1+-1i"输出: "0+-2i"解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i.原创 2021-01-06 19:47:45 · 115 阅读 · 0 评论 -
【LeetCode刷题】830. 较大分组的位置
在一个由小写字母构成的字符串s中,包含由一些连续的相同字符所构成的分组。例如,在字符串s = "abbxxxxzyy"中,就含有"a","bb","xxxx","z"和"yy"这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6]。我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的区间,按起始位置下标递增顺序排...原创 2021-01-05 14:44:29 · 78 阅读 · 0 评论 -
【LeetCode刷题】521. 最长特殊序列 Ⅰ
给你两个字符串,请你从这两个字符串中找出最长的特殊序列。「最长特殊序列」定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1。示例 1:输入: "aba", "cdc"输出: 3解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对.原创 2021-01-04 09:13:08 · 141 阅读 · 0 评论 -
【LeetCode刷题】125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false=============================================================================================原创 2021-01-03 16:06:08 · 105 阅读 · 0 评论 -
【LeetCode刷题】面试题 01.02. 判定是否互为字符重排
给定两个字符串s1和s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1= "abc", s2= "bca"输出: true 示例 2:输入: s1= "abc", s2= "bad"输出: false说明:0 <= len(s1) <= 100 0 <= len(s2) <= 100==============================================...原创 2021-01-02 10:15:51 · 134 阅读 · 0 评论 -
【LeetCode刷题】1624. 两个相同字符之间的最长子字符串
给你一个字符串s,请你返回两个相同字符之间的最长子字符串的长度,计算长度时不含这两个字符。如果不存在这样的子字符串,返回-1。子字符串是字符串中的一个连续字符序列。示例 1:输入:s = "aa"输出:0解释:最优的子字符串是两个 'a' 之间的空子字符串。示例 2:输入:s = "abca"输出:2解释:最优的子字符串是 "bc" 。示例 3:输入:s = "cbzxy"输出:-1解释:s 中不存在出现出现两次的字符,所以返回 -1...原创 2021-01-01 20:15:33 · 1071 阅读 · 0 评论 -
【LeetCode刷题】1704. 判断字符串的两半是否相似
给你一个偶数长度的字符串s。将其拆分成长度相同的两半,前一半为a,后一半为b。两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A','E','I','O','U')。注意,s 可能同时含有大写和小写字母。如果a和b相似,返回true;否则,返回false。示例 1:输入:s = "book"输出:true解释:a = "bo" 且 b = "ok" 。a 中有 1 个元音,b 也有 1 个元音。所以,a 和 ...原创 2020-12-31 09:54:31 · 474 阅读 · 0 评论 -
【LeetCode刷题】387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = "leetcode"返回 0s = "loveleetcode"返回 2提示:你可以假定该字符串只包含小写字母。======================================================================================================================================原创 2020-12-30 15:07:16 · 165 阅读 · 0 评论 -
【LeetCode刷题】1374. 生成每种字符都是奇数个的字符串
给你一个整数n,请你返回一个含n个字符的字符串,其中每种字符在该字符串中都恰好出现奇数次。返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。示例 1:输入:n = 4输出:"pppz"解释:"pppz" 是一个满足题目要求的字符串,因为 'p' 出现 3 次,且 'z' 出现 1 次。当然,还有很多其他字符串也满足题目要求,比如:"ohhh" 和 "love"。示例 2:输入:n = 2输出:"xy"解释:"xy"...原创 2020-12-29 08:54:00 · 196 阅读 · 0 评论 -
【LeetCode刷题】1480. 一维数组的动态和
给你一个数组nums。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])。请返回nums的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+...原创 2020-12-28 09:57:51 · 159 阅读 · 0 评论 -
【LeetCode刷题】448. 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤n(n= 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1,n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入: [4,3,2,7,8,2,3,1]输出: [5,6]==============================================================...原创 2020-12-27 18:16:07 · 159 阅读 · 0 评论 -
【LeetCode刷题】剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=...原创 2020-12-26 15:14:07 · 135 阅读 · 0 评论 -
【LeetCode刷题】747. 至少是其他数字两倍的最大数
在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的索引,否则返回-1。示例 1:输入: nums = [3, 6, 1, 0]输出: 1解释: 6是最大的整数, 对于数组中的其他整数,6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.示例 2:输入: nums = [1, 2, 3, 4]输出: -1解释: 4没有超过3的两倍大, 所以我们返回 -1.提示:.原创 2020-12-25 09:20:05 · 143 阅读 · 0 评论 -
【LeetCode刷题】217. 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true================================================================...原创 2020-12-24 10:58:58 · 108 阅读 · 0 评论 -
【LeetCode刷题】88. 合并两个有序数组
给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]提示:-10^9 &...原创 2020-12-23 20:05:26 · 93 阅读 · 0 评论 -
【LeetCode刷题】905. 按奇偶排序数组
给定一个非负整数数组A,返回一个数组,在该数组中,A的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示:1 <= A.length <= 5000 0 <= A[i] <= 5000================================================...原创 2020-12-22 22:05:14 · 171 阅读 · 0 评论 -
【LeetCode刷题】1464. 数组中两元素的最大乘积
给你一个整数数组nums,请你选择数组的两个不同下标i和j,使(nums[i]-1)*(nums[j]-1)取得最大值。请你计算并返回该式的最大值。示例 1:输入:nums = [3,4,5,2]输出:12解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。示例 2:输入:nums = [1,5,4,5]输出:16解释:选择...原创 2020-12-21 22:27:23 · 313 阅读 · 0 评论 -
【LeetCode刷题】1619. 删除某些元素后的数组均值
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。与 标准答案 误差在 10-5 的结果都被视为正确结果。示例 1:输入:arr = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3]输出:2.00000解释:删除数组中最大和最小的元素后,所有元素都等于 2,所以平均值为 2 。示例 2:输入:arr = [6,2,7,5,1,2,0,3,10,2,5,0,5,5,0,8,7,6,8,0]输出:4.00000原创 2020-12-20 09:42:21 · 187 阅读 · 1 评论