力扣
我会有心仪offer
这个作者很懒,什么都没留下…
展开
-
1749. 任意子数组和的绝对值的最大值
这题本质就是53题最大子数组和,数组是连续的。因此我们需要考虑最大值和最小值,就是维护两个变量,一个针对最大值,一个针对最小值,每一轮都进行比较替换,同时也和最后结果的最大最小值比较。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + ... + numsr-1 + numsr)。如果 x 是负整数,那么 abs(x) = -x。如果 x 是非负整数,那么 abs(x) = x。原创 2023-08-08 11:29:27 · 84 阅读 · 0 评论 -
力扣. 回文链表
这样最后fast指针到末尾了,slow的节点就是中间节点(但是这里为什么是判定fast.next 和 fast.next.next不为空有点疑惑)然后使用list将值复制完成之后,就是普通的回文串判断逻辑,左右双指针进行判断,碰见不相同的字母返回false。所以我们可以采取从中间翻转链表之后,然后比较后半部分翻转之后链表的值和前半部分的值是否对应相等。这题目 最简单的方法就是利用数组(list),将回文链表中的值传入数组(list)进行复制。翻转链表就是基础的翻转链表的力扣题。原创 2023-07-28 17:28:26 · 85 阅读 · 0 评论 -
力扣. 栈的最小值
所以在每次push的函数中,minstack也需要进行push的操作,为空的时候直接push为空的时候判断新加进去的值和minstack上一次加入的值比较,放入两者中最小的值表示为当前stack中最小的值。只有这样的话,在进行pop的操作的时候才能保证两个栈的同步,数量一致,不会出现stack把最小的值丢出去了,minstack仍然记录的是已经pop出去的值。它的准确含义是当时stack中含有的所有元素的最小的值,换句话说它的数量要和stack中的元素一致。--> 返回 -3.--> 返回 -2.原创 2023-07-28 17:13:19 · 30 阅读 · 0 评论 -
力扣.无重复字符串的排列组合
不同的是这里求的是字符的排列组合,因此之前数组的排列用的存储结果的类需要换成StringBuilder,因为求得是排列,因此字符顺序不同,排列就不同,所以不需要startindex,每次都从头遍历,记录已经使用的字符,使用过了则跳过。先用list记录结果,最后要求输出String[]格式,使用to Array(new String[0])变成需要的数组格式。输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]无重复字符串的排列组合。此题就是经典回溯题目全排列。原创 2023-07-25 10:39:44 · 56 阅读 · 0 评论 -
力扣.有重复字符串的排列组合
不同的是这里求的是字符的排列组合,因此之前数组的排列用的存储结果的类需要换成StringBuilder,其他思路是一样的,判断是否字符用过用的是。这题说是有重复字符串的排列组合,因此我们需要对里面的字符进行判断,可以相同,但是一个位置在一轮递归中只能取一次。因此,它就是变相的全排列Ⅱ。因为求得是排列,因此字符顺序不同,排列就不同,所以不需要startindex,每次都从头遍历,记录已经使用的字符,使用过了则跳过。有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。原创 2023-07-25 10:34:56 · 182 阅读 · 0 评论 -
力扣 不含重复字符的最长子字符串
类似滑动窗口的方法,用hashmap记录字母,和出现的位置,当发现重复的字母的时候,比较上一次这个字母出现的位置和现在的子串左边开始的位置,取最大值。是因为,我们一开始从0遍历,那么0对应的字符就算是1,而且逻辑是对的话,你最后测试少了1,我们也就知道得加上1了。首先我们看题目要求是不含重复的子字符串,而不是序列,它更像是数组,必须是连续的。给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3。原创 2023-07-24 17:42:31 · 74 阅读 · 0 评论 -
力扣61.旋转链表
这题求的是旋转链表,从给出的输入例子可以看出所谓得旋转就是把末尾得k个节点按顺序放到链表头部,(实际旋转的k会大于链表长度,因此我们需要对它进行取余操作)那么如何对这道题入手呢,因为我们已经知道这道题得本质就是换顺序,那么我们只要把它变成环形链表,再在需要断开的地方,断开就行。我推荐之后计算链表长度用以下代码,更加直观。len长度初始为1,到下一个节点为空得节点截止。,旋转链表,将链表每个节点向右移动。给你一个链表的头节点。原创 2023-07-23 15:08:06 · 40 阅读 · 0 评论 -
力扣32. 最长有效括号
/也可以只用一个栈,把左括号得下标放入栈,碰到右括号,进行判断,如果栈不为空则先弹出栈顶元素表示匹配了右括号进行下标相减,逻辑类似,如果为空则要保证有最后一个没有被匹配的右括号得下标(用来计算距离)。//可以设置两个栈,分别是碰到'(',')',把下标放入栈中,然后碰到')',判断左括号得栈是否为空,不为空则进行下标相减,求以该右括号为结尾得最长有效括号得长度,弹出两个栈顶元素。原创 2023-07-08 15:10:44 · 90 阅读 · 1 评论 -
力扣第354次周赛Java版(小白角度思路)
第二题,刚开始看没有思路,以为要用动规(太菜了)然后换了个号看看有没有人有讨论的思路。(摘自讨论区),主要的就是数学关系,这点小白要养成看题目写公式的习惯,尤其是数组,这次我是学到了,刷了500题了,数组和字符串就会些明显的方法了,稍微绕点弯就不回了,太残酷了。第一题,简单题,直接用暴力做出来吧,根据题意判断一下符合条件,然后直接对元素的平方累积求和。第三题,也需要自己先把题目中的逻辑捋顺然后写出关系式,进行化简。第四题,暴力法,暂时没有怎么弄懂,跟着大佬写了个java版本的。(不会用差分数组的方法)原创 2023-07-16 16:48:09 · 66 阅读 · 1 评论 -
力扣415. 字符串相加
并且上文中说到,我们正常计算的时候从末尾开始,因此我们对字符串读取数据的时候也要从末尾开始。注意:这时候添加完的StringBuilder是翻转的,因此需要对结果进行翻转和转换字符串。首先分析题目的意图,用字符串模拟非负整数相加的过程。即末尾开始相加,碰到进位保留个位,下一轮计算结果加一。因此可以知道我们得使用循环,因为涉及到多个循环条件,所以不使用for循环,使用while循环。以上是我用小白思路顺序写下来的,应该比较好理解。这题是一道基础题,字符串相乘中也需要用到字符串相加这个逻辑。原创 2023-07-17 17:30:28 · 80 阅读 · 1 评论