
力扣刷题
文章平均质量分 58
歪嗯waien
这个作者很懒,什么都没留下…
展开
-
Java比较方法
当元素的类型没有实现Comparable接口而又不方便修改代码,或者实现了Comparable接口的排序不适合当前的操作(如从大到小排),就可以使用Comparator的对象来排序。Java有非常丰富的API供我们使用,比较方法也有很多种,不仅是我们在平时经常用到的equals()方法,其实很多工具类的排序方法也是基于最基础的比较的方法实现的。题目来源LeetCode,这题是个中等题,但难点其实是在如何重新对字符串进行排序,学会了上面的方法就豁然开朗了。...原创 2022-07-22 20:31:57 · 674 阅读 · 0 评论 -
刷题:字符串解码(栈)
栈先入后出,所以先提取字母,利用StringBuffer的insert方法从头部插入,即可还原原本的顺序,移到左括号截至,重新来存储数字,这里注意判断栈是否为空,毕竟数字可以是第一个。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4]的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。输入s="2[abc]3[cd]ef"输入s="3[a]2[bc]"输入s="3[a2[c]]"输出"abccdcdcdxyz"...原创 2022-07-21 22:13:47 · 123 阅读 · 0 评论 -
刷题:礼物的最大价值(动态规划)
在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?链接https//leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof。,只是需要把路过结点的值相加,选取上方和左侧最大的点作为子结构即可。解释路径1→3→5→2→1可以拿到最多价值的礼物。...原创 2022-07-20 19:04:16 · 187 阅读 · 0 评论 -
刷题:不同路径(动态规划)
很显然问题满足最优子结构和重叠子问题,去往右下方的数量等于自己上方和左边结点的数量之和(如果没有越界的话),第一行以及第一列由于只能向右和向下走,故数量均为1,初始化以后运算即可。一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。1.向右->向下->向下。2.向下->向下->向右。3.向下->向右->向下。输入m=3,n=7。输入m=3,n=2。输入m=7,n=3。输入m=3,n=3。...原创 2022-07-20 17:27:26 · 115 阅读 · 0 评论 -
替换后的最长重复字符(变长的滑动窗口)
这题的活动窗口初始长度为0,最大长度是相同的字符串+k,在不断遍历的过程中,需要用maxn去记录最大字符串,才能约束left左移。给你一个字符串s和一个整数k。滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。将中间的一个'A'替换为'B',字符串变为"AABBBBA"。窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。解释用两个'A'替换为两个'B',反之亦然。输入s="AABABBA",k=1。输入s="ABAB",k=2。...原创 2022-07-19 14:44:54 · 187 阅读 · 0 评论 -
找到字符串中所有字母异位词(暴力搜索、滑动窗口、优化的滑动窗口三种解法)
给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。起始索引等于0的子串是"cba",它是"abc"的异位词。起始索引等于6的子串是"bac",它是"abc"的异位词。起始索引等于0的子串是"ab",它是"ab"的异位词。起始索引等于1的子串是"ba",它是"ab"的异位词。起始索引等于2的子串是"ab",它是"ab"的异位词。输入s="abab",p="ab"...原创 2022-07-19 12:08:46 · 505 阅读 · 0 评论 -
合并两个有序链表(迭代、递归两种解法)
递归的话,难点在于判断返回值,其中一方链表遍历结束或者它本来就是空链表的话,直接返回另一个链表即可,至于下面的比较数值,其实就是把每个结点都拆分出来,排好序,最后回溯依次连接,再整体返回。迭代比较好理解,重新建立一个链表,然后list1与list2相比较,将数值小的那个连在新链表的后面,当一个链表全部遍历后直接把另一个接在末尾即可。输入l1=[1,2,4],l2=[1,3,4]输入l1=[],l2=[0]输入l1=[],l2=[]输出[1,1,2,3,4,4]...原创 2022-07-18 12:19:28 · 273 阅读 · 0 评论 -
刷题:有效的数独
题目很好理解就不过多赘述,并且也讲明了解题思路,就是判断三次,分别是每行每列以及3x3的方块。建立三个数组,用哈希表的方式来统计,如果所对应的值>1就说明不符合条件。解释除了第一行的第一个数字从5改为8以外,空格内其他数字均与示例1相同。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。只需要根据以上规则,验证已经填入的数字是否有效即可。一个有效的数独(部分已被填充)不一定是可解的。数字1-9在每一行只能出现一次。...原创 2022-07-16 15:20:12 · 81 阅读 · 0 评论 -
刷题:岛屿数量(深搜)
找到值为‘1’的点,岛屿数量++,然后通过深搜找出它的其他相连陆地,并把值改为非‘1’即可,就可以防止重复统计。原创 2022-07-16 12:00:31 · 98 阅读 · 0 评论 -
刷题:图像渲染(深搜、广搜两种解法)
输入image=[[1,1,1],[1,1,0],[1,0,1]],sr=1,sc=1,newColor=2。输入image=[[0,0,0],[0,0,0]],sr=0,sc=0,newColor=2。解析在图像的正中间,(坐标(sr,sc)=(1,1)),在路径上所有符合条件的像素点的颜色都被更改成2。输出[[2,2,2],[2,2,0],[2,0,1]]输出[[2,2,2],[2,2,2]]最后返回经过上色渲染后的图像。......原创 2022-07-16 11:27:17 · 206 阅读 · 0 评论 -
刷题:重塑矩阵
在MATLAB中,有一个非常有用的函数reshape,它可以将一个mxn矩阵重塑为另一个大小不同(rxc)的新矩阵,但保留其原始数据。给你一个由二维数组mat表示的mxn矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。否则,输出原始矩阵。输入mat=[[1,2],[3,4]],r=1,c=4。输入mat=[[1,2],[3,4]],r=2,c=4。输出[[1,2],[3,4]]输出[[1,2,3,4]]...原创 2022-07-15 16:14:54 · 172 阅读 · 0 评论 -
刷题:验证二叉搜索树
想出了两种方法,第一种就是边遍历边判断,每一个结点的值都是介于upper和lower之间的,如果超出范围就返回false。第二种方法是大家很熟悉的中序遍历,最后遍历出来的值一定是一个有序递增的数组,根据这个数组是否有序即可判断是否是二叉搜索树。...原创 2022-07-15 10:42:52 · 186 阅读 · 0 评论 -
刷题:二分查找
一、题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:示例 2:提示:你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间...原创 2022-07-14 11:56:53 · 78 阅读 · 0 评论 -
刷题: 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1: 示例 2: 示例 3: 示例 4:解释:给定的链表为空(空指针),因此返回 null。 提示:-10000 ...原创 2022-07-13 20:35:12 · 97 阅读 · 0 评论 -
刷题:两数之和
一、题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:示例 2:示例 3:提示:2 ...原创 2022-07-13 15:30:02 · 69 阅读 · 0 评论 -
二叉树的层序遍历(广搜)
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:示例 2: 示例 3:提示:树中节点数目在范围 [0, 2000] 内-1000原创 2022-07-13 14:16:21 · 183 阅读 · 0 评论 -
最大字段和(动态规划)
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:示例 2:示例 3:提示:1原创 2022-07-12 19:48:23 · 312 阅读 · 0 评论 -
刷题:用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )原创 2022-07-12 12:04:08 · 146 阅读 · 0 评论 -
刷题:最长回文串
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。原创 2022-07-12 11:29:47 · 457 阅读 · 0 评论 -
刷题:买股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。...原创 2022-07-12 10:17:32 · 209 阅读 · 0 评论 -
刷题:反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2022-07-11 17:10:48 · 69 阅读 · 0 评论 -
力扣:环形链表
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。...原创 2022-07-11 10:41:42 · 293 阅读 · 1 评论