- 博客(8)
- 收藏
- 关注
原创 算法刷题Day10 - 栈与队列part1|栈与队列基础|LC.232 用栈实现队列|LC.225 用队列实现栈|LC20.有效的括号|LC1047. 删除字符串中所有相邻重复项
解题思路:用两个栈来模拟队列,先把所有元素入栈stackIn,再依次出栈放到另一个stackOut栈中。stackIn相当于一个暂存区,关键是出栈的逻辑,假如stackOut的元素还没出完是不能添加进去的,否则顺序就乱了,必须先判断stackOut是否为空才能从stackIn出栈再全部加入。解题思路:这题可以只用一个队列来达到目的,在pop的时候得到的是栈的顶层元素,但在队列中就相当于弹出队列中最后一个元素,队列中能够弹出的也只能是头一个元素,因此每一次push就把第1~n-1个元素重新排列进队列即可。
2024-09-07 08:40:35
172
原创 算法刷题Day8 - 字符串part1|LC.344 反转字符串|LC.541 反转字符串 II
解题思路:这题的题目规则似乎很复杂,需要抓取其中的特定规律就可以简化代码,其实就是最好尾部能否凑足k个元素的不同操作的区别只需在每2k个区间内判断是否够k个元素来进行不同区间的反转。注意事项:这里要注意的是临界值判断的问题,这里反转区间统一采用左闭右开区间,在够k个的情况是小于等于的,因为去掉等于的情况就相当于跳过了最后末尾刚好够k个的情况。解题目标:给定一个字符串和正整数k,每2k个字符反转前k个字符,如果最后不够2k个且不够前k个就剩下的都反转,如果够前k个就反转前k个。
2024-09-06 05:37:51
173
原创 算法刷题Day7 - 哈希表part2|LC.454 四数相加 II|LC.383 赎金信|LC.15 三数之和|LC.18 四数之和
实际上可以在这个思路上进一步优化,把前两个数组A[i]+B[j]的元素相加并放入集合,再遍历后两个数组的元素和来对集合里的数进行判断是否有与集合中的元素相加等于0的情况,这样n^2就可以达到目的。还有这题必须要用map来进行统计的原因是A+B数组的元素和可能会有不同的排列组合,比如呀1+4,2+3都是5,因此我们的key保存的是前两个数组元素和的值,value应该要保存两数之和出现的次数,判断中应该每次加的是之前所统计的出现次数而不是单纯的加一。:为什么是分为两组?
2024-09-06 03:40:00
135
原创 算法刷题Day5~Day6 - 哈希表part1|哈希表基础|LC.242 有效字母的异位词|LC349. 两个数组的交集|LC202. 快乐数|LC1. 两数之和
这里的num>0的循环条件并不会形成死循环,按照逻辑处理完所有数位后n会变成小数,但因为num定义为int,Java的除法机制自动丢弃小数部分,因此处理完之后num就是等于0的,退出循环。注意这里键值对中key是数值而不是index,因为我们在查找的时候是根据差值diff来查找的,因此key为数组中的数值,value为index。因为数组里的数值大小我们是无法确认的,这时候做哈希映射的时候用数组就不太合适了,因为确定不了一个固定的数组长度(leetcode上更新了数字大小的上限,其实是可以做的)。
2024-09-04 00:58:03
617
原创 算法刷题Day4 - 链表part2|LC.24 两两交换链表中节点|LC.19 删除链表的倒数第N个节点|LC.160 链表相交|LC.142 环形链表
这个写法对于没有交点的情况并不会出现死循环不能正常返回null,因为最后两个指针一定是相等的,判断条件也会停止,也就是两个指针都是null的情况即返回null。这题为双指针思路,fast和cur都从dummy节点开始,快指针fast先移动n个位置,再同时移动cur和fast,因为目标节点和最后一个节点的距离是确定的,注意cur指针指向的应当是。首先比较简单的思路,就是算出两个链表的长度差值n,让长的那个链表先走n步使得两个链表的两个指针在同一起跑线进行移动,循环后可以直接判断是否有交点;
2024-09-03 00:08:26
781
原创 算法刷题Day3 - 链表part1|链表基础|LC203. 移除链表元素|LC707. 设计链表|LC206. 反转链表
在我第一次写的时候疏忽了一个细节,在判断下一个节点是删除对象并且改动next指向的时候不应该把current向后移,因为有可能next所指向的新的节点也是删除对象,直接后移就相当于跳过了,因此要保证检查完下一个不是删除对象的时候current才能往后移。移除链表中的元素,本质上就是改动移除元素的前一个节点的下个指针直接指向移除元素的下一个节点。注意插入节点的操作常犯的错就是步骤的问题,可能会直接把前一个节点之间连接到新的节点,但是新的节点想要链接到下一个节点的时候发现取不到了。链表也有不同的类型,如。
2024-08-31 01:39:35
259
原创 算法刷题Day2 - 数组Part2|LC209. Minimum Size Subarray 最小长度子数组|LC59. Spiral Mareix II 螺旋矩阵 II|
今天这两题是数组中的Medium题,比起昨天的基础的数组增删改查操作的题目稍复杂。
2024-08-29 23:46:51
312
原创 算法刷题Day1- 数组part1|数组基础|LC704. Binary Search|LC27. Remove Element|LC977. Squared of a Sorted Array
数组中移除元素时,删除的时候并不是单纯删除了这个地址位置,而是之后的元素需要一一向前补位,比如 [1,2,3,4,5] 删除元素2, 那么数组就是变成了 [1,3,4,5,_] ,至于最后一个数是什么无所谓,因为我们所需要的结果和最后一个数 无关。双指针思路主要是用fast指针来判断新数组所需要的值(即不等于我们需要删除的target的元素),把fast赋值给slow的位置,slow负责更新新数组的每一个位置,这样只要通过一次遍历并且在原数组上进行操作即可。我们可以抓住平方的特性,最大的平方数一定是在。
2024-08-29 01:01:17
255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人