leetcode刷题目录

本文记录了在LeetCode上的刷题进度,涉及字符串和数组两大主题。包括替换问号、重复子字符串、上升下降字符串等经典问题,探讨了字符串操作、数组处理和二叉树的相关解题思路,如利用二分查找、动态规划和前缀和等方法。同时也涵盖了部分难题,如矩形区域不超过K的最大数值和、青蛙过河等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode专栏下置顶文章,为刷题做一个记录,按照leetcode官网题库栏目右侧的“标签分类”,每个分类做一个表格,记录做过的题,不记录解法,持续更新。。。

字符串

题目编号题目名称难度等级做题日期应用解题思路
1576替换所有的问号简单2020-02-22可以生成一个字母组成的字符间不重复的字符串通过判断字符串中一个字符前后的字符是否和该字符相同
459重复的子字符串简单2020-02-23判断一个字符串是否完全由一个子字符串组成在这里插入图片描述
1370上升下降字符串简单2020-02-24将一个无序字符串排序为升降升降…类型的字符串https://leetcode-cn.com/problems/increasing-decreasing-string/solution/1370-shang-sheng-xia-jiang-zi-fu-chuan-b-rhsr/
面试题 01.06字符串压缩简单2020-02-25判断一个由连续子字符串组成的字符串中的子字符串字符的重复次数https://leetcode-cn.com/problems/compress-string-lcci/solution/mian-shi-ti-0106-zi-fu-chuan-ya-suo-by-x-eyjl/
1374生成每种字符都是奇数个的字符串简单2020-02-27生成每种字符都是奇数个的字符串https://leetcode-cn.com/problems/generate-a-string-with-characters-that-have-odd-counts/solution/1374-sheng-cheng-mei-chong-zi-fu-du-shi-34ylg/
859亲密字符串简单2020-02-27给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果https://leetcode-cn.com/problems/buddy-strings/solution/859-qin-mi-zi-fu-chuan-by-xiaogd-3add/
5689统计匹配检索规则的物品数量简单2020-02-28通过对字符串的判断过滤出集合中的部分元素https://leetcode-cn.com/problems/count-items-matching-a-rule/solution/5689-tong-ji-pi-pei-jian-suo-gui-ze-de-w-fcqs/

数组

题目编号题目名称难度等级做题日期应用解题思路
867转置矩阵简单2020-03-01获取一个矩阵的转置矩阵https://leetcode-cn.com/problems/transpose-matrix/solution/867zhuan-zhi-ju-zhen-by-xiaogd-20m4/
面试题 17.10主要元素简单2020-03-01判断一个数组中是否有超过半数的重复元素https://leetcode-cn.com/problems/find-majority-element-lcci/solution/mian-shi-ti-1710-zhu-yao-yuan-su-by-xiao-43xy/

每日一题

题目编号题目名称难度等级做题日期应用解题思路
28实现 strStr()简单2020-04-20判断一个字符串中是否包含另一个子字符串String类的indexOf()方法:return haystack.indexOf(needle);
897递增顺序搜索树简单2020-04-25二叉树搜索树转集合,有序集合构造链表先将二叉树搜索树转为递增的集合,再由集合构造一个递增的链表
1011在 D 天内送达包裹的能力中等2020-04-26二分查找的理解应用,二分查找边界的确定确定二分查找的左右边界后,取中位数,按中位数为最大载货量计算天数,如果计算天数小于给定天数,右边界左移;如果计算天数大于给定天数,左边界右移.
938二叉搜索树的范围和简单2020-04-27二叉搜索树特性的应用,递归练习假设有一个指针指向当前节点,如果节点的值大于上限值,则指针左移;反之节点的值小于下限值,则指针右移。当节点值位于下限值和上限值之间的时候,当前值向左累加大于下限的值,向右累加小于上限的值,所得数值即为结果.
633平方数之和中等2020-04-28Math类的sqrt方法应用,双指针理解解法1:暴力循环,初始化变量a为0,c - a乘a之后开平方,如果所得数字为整数,返回true. 循环结束后没有返回true则返回false;解法2:双指针,取a为0,b为c的开平方取整,当a小于b时,计算a乘a加b乘b的和sum,如果sum等于c,返回true;如果sum小于c,a自增;如果sum大于c,b自减。最终sum没有等于c则返回false。力扣大佬关于这种做法不会错过正确答案的解释:https://leetcode-cn.com/problems/sum-of-square-numbers/solution/shuang-zhi-zhen-de-ben-zhi-er-wei-ju-zhe-ebn3/
137只出现一次的数字 II中等2020-04-30Map的使用-getOrDefault方法 二进制(还没理解)Map的key值存元素的值,value值存元素出现的次数,取出出现次数为1的值即为该题的解
690员工的重要性简单2020-05-01对树这种数据结构以及深度优先遍历的理解,再次理解递归首先将员工按照<id, Employee>的结构存到map中,接着根据拿到目标输入员工,获得其重要性total,遍历该员工下级员工id,根据id拿到员工对象,total累加员工的重要性(此处进行递归调用)
554砖墙中等2020-05-02用空间换时间通过统计宽度累加值相同的砖块的个数出现的次数统计未经过砖块的数量,用固定值总数量减未经过砖块的最大值,即得经过砖块的最小值
7整数反转简单2020-05-03除法和取余操作结合反转整数原数取余的余数为所求数的首位数,所求数乘以10加原数余数,之后原数除以10取下一位数
740删除并获得点数中等2020-05-05动态规划使用198.打家劫舍的解题思路降低时间复杂度—删除一个元素,与其相同的元素的点数及其自身点数会加到结果中,再用打家劫舍的思想删除其相邻元素.
1720解码异或后的数组简单2020-05-06异或运算主要在于理解arr[i] ⊕ arr[i + 1] = encode[i],则arr[i + 1] = arr[i] ⊕ encode[i]
1486数组异或操作简单2020-05-07异或运算在这里插入图片描述1、0与数组第一个元素异或,之后同后续元素异或. 2、数学方法,没掌握
1482制作 m 束花所需的最少天数中等2020-05-09二分查找如果bloomDay数组的长度小于要制作花束的数量m和制作每束花需要的花的支数k的乘积,那么即使花全部成熟也不能制出m束花,返回-1;
当bloomDay.length >= m * k时,一定能制作出满足数量的花束,接下来就需要确定时间;
最长的时间就是数组中最大的元素high,最短的时间就是数组中最小的元素low,这是二分查找的边界;
当low < high时,确定中间值制作花束需要的天数days = (high - low)/2 + low;
之后使用canMake方法判断days天内是否能制作出满足数量的花束, canMake方法的思路为bouquets对应制作几束花,flowers为每束花的数量,二者同m和k进行比较。for循环中比较days和bloomDay[i],如果days >= bloomDay[i],证明bloomDay[i]可以在days内开放,那么flowers++。在这个前提下,flowers的数量等于k时,就可以制作一束花,那么重置flowers,bouquets++,如果这个前提不成立,说明bloomDay[i]在days天内还没有开放,重置flowers,进行下一次循环。最后如果bouquets >= m,说明可以制作m束花,返回true,否则返回false;
canMake方法返回true时,说明days比较大,还可以在更短的时间内制作m束花,那么降低二分查找的上边界,high = days;反之说明days比较小,需要提高二分查找的下边界low = days + 1。
872叶子相似的树简单2020-05-10二叉树深度优先遍历,ArrayList的equals方法的使用使用深度优先遍历分别取两棵树的叶子节点放入两个List集合中,再使用equals方法对两个集合进行比较即可。
11734解码异或后的排列中等2020-05-11异或运算在于如何找出原数组的第一个元素,正整数排列是从1开始,设原数组的长度为n,则原数组所有元素异或的结果是1~n异或的结果total,原数组中除了第一个元素以外所有元素异或的结果是encoded所有奇数下表的元素的结果odd(这个自己写一个数组验证即可)。由此可得原数组第一个元素perm[0] = total ^ odd;第一个元素出来后,解法同1720、解码异或后的数组相同
1310子数组异或查询中等2020-05-12异或性质的应用1、通过原数组arr计算xors,使xors[i + 1] = arr[i] ^ arr[i + 1];
2、推导arr[left] ^ arr[left + 1] ^…arr[right] = xors[left] ^ xors[rigth + 1],这里用到相同的数异或为0、异或的结合律两个性质;
3、最后将求arr多个元素的异或转化成求xors两个元素的异或即可。
1269停在原地的方案数困难2020-05-13动态规划1、定义dp[i][j]为i步后在下表j的方案数,则有一直不动的dp[0][0] = 1
2、i和j的取值范围分别是i <= steps,j <= arrLen,则有0 <= j <= min(steps, arrLen)
3、由于可以向左向右移动或不动,所以dp[i][j] = dp[i - 1][j - 1] + dp[j - 1][j] + dp[j - 1][j + 1]
4、移动的时候要注意两个条件:i为0时不能向左移动,i为arrLen - 1 时不能向右移动
4、最后答案即为dp[steps][0]
12整数转罗马数字中等2020-05-14数组转换将罗马数字和阿拉伯数字的每一种表示对应为values数组和symbols数组,之后将num同阿拉伯数字数组的最大值values[i]比较,若num > values[i],则 num -= values[i],将symbols[i]拼接到罗马数组字符串roman上,若num依旧大于values[i],继续上一步,否则取values[i - 1]重复操作,当num = 0时即为转换后的罗马数字.
13罗马数字转整数简单2020-05-15哈希表的使用将罗马数字和阿拉伯数字对应到哈希表中,对于4,9,40等特殊数字,判断其与后一位的大小,若小于后一位,将其转为复数即可。
993二叉树的堂兄弟节点简单2020-05-17二叉树的遍历,递归的使用1、两兄弟相同深度;2、两兄弟父节点不同。
遍历二叉树,寻找左边等于x,右边等于y的值,同时记录遍历的深度以及遍历节点的父节点,当左边的值等于x,右边的值等于y时返回,并判断两边的深度是否相同,两边节点的父节点是否不同,从而得解。
1442形成两个异或相等数组的三元组数目中等2020-05-18异或运算中前缀和的应用主要在于如何推导出a^b = s[i] ^ s[j + 1];
1738找出第 K 大的异或坐标值中等2020-05-19通过前缀和求martix[i][j]的值,将其由二维矩阵转为一维集合,排序后可以得出第k大的值二维矩阵前缀和的推导,pre[i][j] = pre[i - 1][j] ^ pre[i][j - 1] ^ pre[i - 1][j - 1] ^ martix[i][j]
692前K个高频单词中等2020-05-20哈希表、集合排序、优先队列1、哈希表统计次数之后排序放到List集合中,取集合前k个元素组成新集合返回;2、第一步相同,哈希表统计次数;优先队列使用Comparator比较器对象作为构造函数参数创建优先队列对象,之后按照升序从队尾插入数据,然后遍历哈希表,从队列尾部插入数据,当数据的个数大于k时,从队列首部删除数据,最后队列中保留的是前k个出现次数最多的元素;将队列中元素的key值放入集合,不过此时元素的顺序是升序,要将集合反转之后再返回
3424的幂简单2020-05-31位运算—与目标数须大于0,且二进制表示第一位不能为1(n&(n - 1) == 0),且与0xaaaaaaaa按位与之后等于0
1744你能在你最喜欢的那天吃到你最喜欢的糖果吗?中等2020-06-01数组前缀和,数组交集在第favoriteType天能吃到的最少的糖和最多的糖构成一个区间,以favoriteType - 1为下标的前缀和 + 1和以favoriteType为下标的前缀和构成一个区间,两个区间若有交集,返回true,否则返回false
523连续的子数组和中等2020-06-02数组前缀和从0开始求数组前缀和存入哈希表中,第0个元素没有前缀,存(0, -1),判断两个前缀和之间的子数组能否整除k,只需判断两个前缀和对k取余的结果是否相等即可
525连续数组中等2020-06-03数组前缀和遍历数组,将数组前缀和及下标存入哈希表中,每次遍历时判断哈希表中是否包含此次便利的前缀和,如果包含,取此次遍历的下标减掉相同前缀和的下标为最大长度,否则将此次遍历的前缀和以及此次遍历的下标存入哈希表中,遍历结束后即可取得最大长度
518零钱兑换 II中等2020-06-010动态规划1、int[] dp = new int[amount + 1];定义dp数组,下标表示凑出来的金额数,存放的元素为凑出此金额数的方案数
2、两层循环,第一层取的是硬币数组coins中的每个元素,不同面值的硬币coin,第二层循环,从coin开始计数,开始的下标即为coin,这样做dp[i] = dp[coin] = dp[coin] + dp[coin - coin] = dp[coin] + dp[0] = dp[coin] + 1,1保证了当i恰好为coin时,取一枚coin凑出i的做法,继续循环,当i增加时,i - coin为取一枚大小为coin的硬币后,剩余的金额数由coin大小的硬币凑出来的可能性
3、当第一层循环结束后,所有coin凑出i的可能性计算完毕,dp[amount]即为答案
852山脉数组的峰顶索引简单2020-06-015二分查找1、因为是山脉数组,所以第一个元素和最后一个元素不可能是所求下标,取left = 1, right = n - 2, ans取默认值0;
2、进行二分查找,当left <= rigth时,取中位数mid,判断arr[mid]是否大于arr[mid + 1],如果arr[mid]大于arr[mid + 1],说明mid偏大,i向左移,取right = mid - 1;反之向右移,取left = mid + 1;
3、当循环结束,left = right,此时ans的值即为所求的值.
401二进制手表简单2020-06-21枚举,Integer.bitCount()计算二进制数字中1的个数小时和分钟数两层for循环计算其中二进制中1的位数和同turnedOn相等即符合要求

抄完题解不会的题

题目编号题目名称难度等级做题日期应用解题思路
363.矩形区域不超过 K 的最大数值和困难2020-04-22
403青蛙过河困难2020-04-29
1473粉刷房子 III困难2020-05-04
1723完成所有工作的最短时间困难2020-05-08拆分某个数组为相近的几份数组反转的方法,理解二分查找(边界及中位数的确定)
421数组中两个数的最大异或值中等2020-05-16
1049最后一块石头的重量 II中等2020-06-08
879盈利计划困难2020-06-09
877石子游戏中等2020-06-16
65有效数字困难2020-06-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值