一刷力扣
文章平均质量分 75
以刷题为主
俊熙学长
这个作者很懒,什么都没留下…
展开
-
day10 | 用栈实现队列、用队列实现栈、有效的括号、删除字符串中的所有相邻重复项
push操作时,先让queue2接收,若queue1不为空,则将1队列的元素放入2队列中,此时2队列放的元素跟栈元素放出的顺序一致,最后交换1队列和2队列即可。queue1:该队列放的元素跟栈元素放出的顺序一致,例如压入1,2,3三个元素,栈元素:1,2,3;第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。原创 2024-06-26 12:38:37 · 729 阅读 · 0 评论 -
day08 | 反转字符串、反转字符串||、替换数字
思路:java不能修改原字符串,所以我们需要定义一个新数组(长度需要求出);首先我们需要的出新数组的长度,不难得出:字符串s中每出现一个数字,新数组的长度就需要加5,然后进行填充即可。思路:用到左右指针left,right,分别从数组最左端和最右端开始遍历,过程中进行交换操作即可。思路:本题其实就是让你反转 长度为2k区间 的前k的字符,不过需注意若尾数不够k个,就要全部反转。当然,我们也可以直接用StringBuffer或StringBuilder来解决。原创 2024-06-16 15:57:16 · 684 阅读 · 0 评论 -
day07 | 四数相加II、四数之和
思路:这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况。如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,right--;如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left++;思路:在三数之和的基础上再加一层for循环以及二级剪枝操作即可。原创 2024-06-13 21:10:04 · 911 阅读 · 1 评论 -
day06 | 有效的字母异位词、两个数组的交集、快乐数、两数之和
思路:题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现!所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。思路:本题我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,所以我们需要定义一个map来解决。思路:本题要求输出结果每个元素是唯一的,明显需要有去重操作,所以可以定义两个set来解决。思路:由于s和t都是由26个小写字母构成,数量很少,直接定义一个26空间的数组即可。key:用来存放遍历的元素。原创 2024-06-12 22:51:35 · 1179 阅读 · 0 评论 -
day04 |两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表II
满足:x + quan1*(z+y) + y= 2*x + 2*quan2*(z+y) + 2 * y, 化简得z = x + (2*quan2-quan1+1)*(z+y)所以之后fast从相遇点出发,slow从head出发时,slow是不可能进入环内的,slow与fast一旦相等,那就是链表开始入环的第一个节点!思路:用到快慢指针,在两者相交之前,fast指针一次两步,slow指针一次一步。p1:遍历headA,为空时则遍历headB,实现"合并链表"思路:采用合并链表的思想,定义p1,p2两指针。原创 2024-06-11 15:38:21 · 796 阅读 · 0 评论 -
day03| 移除链表元素、设计链表、反转链表
思路:首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null,还要定义一个next指针用来保存当前节点的后一个节点。循环时需要先赋值next,然后进行翻转操作,之后移动pre,cur两指针。-设置一个虚拟头结点再进行删除操作。-直接使用原来的链表进行删除操作。原创 2024-06-08 15:19:09 · 598 阅读 · 0 评论 -
day02| 有序数组的平方、长度最小的子数组、螺旋矩阵||
nums暴力思路:直接对数组每个数先进行平方,然后输出排序后的数组。时间复杂度O(n*longn),力扣上耗时5ms空间复杂度O(n)双指针思路:数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。另一种与之相反的思路:前者是直接找最大平方数,次大平方数...,是从最左和最右开始遍历;其实我们也可以从中间开始遍历,直接找最小数,倒数第二小的数...,之后再将没遍历完的数再加进来即可。原创 2024-06-07 12:29:51 · 547 阅读 · 0 评论 -
day01| 二分查找、 移除元素
思路:用二分法先得到第一个大于等于target的下标若返回值等于nums.length或返回值对应的数组元素不是target,则表示没有该元素,返回[-1,-1]即可,否则此时的返回值就是第一个位置;然后在该位置遍历数组,持续更新end就可以找到最后一个位置了。int end;原创 2024-06-05 18:02:20 · 762 阅读 · 1 评论 -
day09 | 翻转字符串里的单词、右旋字符串
为设置单词之间的空格需要注意,当slow==0时,此时不需要动slow。= 0时,我们需要在填充单词开始之时手动添加一个空格。思路: 首先还是先反转整个字符数组,然后反转[0,k-1]区间内的字符数组,最后反转[k,s.length-1]区间内的字符数字就完成了。思路:首先需要得到有效的字符串数组(去除多余空格),然后将整个数组反转,最后将单词反转就完成了。设置快慢指针slow,fast;slow定位在要修改的初始下标,fast一直遍历数组。原创 2024-06-19 13:52:41 · 476 阅读 · 0 评论