- 博客(17)
- 收藏
- 关注
原创 [leetcode]394. 字符串解码(Java)
不知道是不是我想的太复杂了,这个题我反复试了好多次,总会有一些地方有遗漏。最后做出来的这个解法速度也不快。时间复杂度O(N),空间复杂度O(N)
2024-12-10 12:21:42
512
原创 [leetcode]2. 两数相加(Java实现)
做这个题需要考虑到一些事情:1.题目所给的数字的方向,读题和示例可知链表头部是个位数,第二个是十位数,以此类推,输出链表也需要相同的格式。2.有可能出现两个输入链表个数不同的情况。3.考虑进位情况。
2024-12-08 20:36:00
555
原创 [leetcode]150. 逆波兰表达式求值(Java实现)
看了官方题解,思路就是这样,应该是我用try catch太费时间了,改成if语句写一个判断函数判断是否为数字,再加上下面判断是哪个操作符那一块改成用swich就快很多。遍历集合,遇到数字就压入栈,遇到运算符就把顶部两个数字弹出进行运算,再重新压回入栈,继续遍历。最后栈中只会留下一个数字,就是最终结果,弹出即可。这是学数据结构的时候都学过的解法。逆波兰表达式是比较容易理解的。但是这样好像有点慢诶。
2024-12-04 19:13:54
309
原创 [leetcode]155. 最小栈(Java实现)
框架是题目搭好的,但我多加了一个函数,resize()。原因是:我看到要找最小数字,第一反应是选择了数组,而数组的大小一开始固定后没法再改变,题目又需要插入很多数字,所以我写了一个resize,一旦空间不足,就扩容一倍。这个思路也比较简单:1.设定一个标志位top指向栈顶,一开始为-1。2.插入数字时先将标志位+1,再用数组元素赋值方式插入。3.弹出数字时直接将标志位-1,不需要考虑清空的情况,因为下次插入会覆盖。4.取栈顶数值时(即不需要弹出),则直接返回stack[top],标志位不需要改变。
2024-12-03 20:44:59
421
原创 [leetcode] 20.有效的括号
这个思路超简单的,一秒钟想到,但是耗费时间还是挺长的不是特别推荐,很适合理解题目意思用。好多层判断:1.判断栈内是否为空。如果是->无论取到什么字符都压入栈2.判断取到的字符是否为'(' '[' '{' 这几个前部符号,如果是->直接压入栈内。3.判断取到的字符是后部符号的哪一个:3.1 判断栈内顶部peek 是否为其匹配的前部符号,如果是,则pop将前部符号弹出,continue继续取下一个字符3.2 如果不是,则直接返回false,永远也匹配不上了。
2024-12-02 21:51:46
378
原创 [leetcode]92. 反转链表II(Java实现)
接下来我们通过temp=temp.next遍历链表,用num记录当前遍历到了第几个节点,到left-1个节点时表示是反转部分的前一个(Start),记录下来。下一步,将栈的顶部用peek获得(此时没有弹出)赋值给Start的next,这样和前面部分的连接就做好啦。中间就用两个标志位反复取得从栈里取出排好队就好咯。首先需要考虑一下要设置那些标志位:第一个是反转部分的前一个位置,因为它的next是需要改变的;前面要设置一个虚节点newHead因为需要考虑反转部分是从头开始的情况,head被改变的情况。
2024-11-24 20:29:33
333
原创 [leetcode]21. 合并两个有序链表(Java实现)
这个思路是很简单的,就是比较放入,主要是要注意考虑到如何实现头结点的放入?如何判断后续一个链表放完了另一个还没放完的情况?想清楚模拟好就行。时间复杂度O(n+m),空间复杂度O(1)虽然每次用这种简单方法都很快能做出来但是感觉不是很有提升,所以接着想一下能否用递归实现这个题目。
2024-11-20 20:09:19
421
原创 [leetcode]19. 删除链表的倒数第n个节点(Java实现)
一开始看到这个题目我是有点懵的,因为链表没法从尾巴开始找嘛。双重循环肯定是可以解决的,但感觉意义就不大了。
2024-11-18 21:26:22
417
原创 [leetcode]203. 移除链表元素(Java实现)
放一个虚拟的哨兵节点在head前面,为了保证能够考虑到head需要被删除的情况。这个删除算法还是比较简单的,用一个循环判断再移节点的next就好了。
2024-11-18 20:38:51
276
原创 [leetcode]160. 相交链表(Java实现)
最容易想到的方法,双层循环,先固定listA的节点,遍历listB,看是否有节点的next是此NodeA,再遍历listA,直到找到某NodeB的next是NodeA,则此NodeA就是相交节点。时间复杂度O(),空间复杂度O(1)。
2024-11-18 20:01:03
326
原创 [leetcode]27. 移除元素(Java实现)
我今天到这儿才做完小红书学长规定的第一天刷题内容。。拖拉死了。做数组题就是要想着:绝对不要用双层循环啊啊啊。而且有时候感觉自己会想的比较复杂,看题解的一些简单清奇思路会豁然开朗。
2024-11-16 16:26:18
356
原创 [leetcode]485. 最大连续1的个数(Java实现)
给定一个二进制数组nums, 计算其中最大连续1的个数。3开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.2。
2024-11-15 20:29:16
462
原创 [leetcode]283. 移动零(Java实现)
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。nums =nums =[0]今天很欣慰,写代码已经有所恢复,起码这种入门级代码又是一下能写出来了。写完我就知道这段代码菜的不行,两个循环套着呢,时间复杂度O(移动的思想。。。
2024-11-15 19:38:59
383
原创 [leetcode] 26. 删除有序数组中的重复项(java实现)
很久没敲代码了。。上次敲代码还是大一的时候。。。。。为了找实习开始刷力扣,26是我的开始题目,第一题,实在不想卡在第一题去看别人的就自己磨着做,终于做出来第一版但是运行速度很慢。。。我按照小红书上一个博主分享的“8周刷完200题”的顺序来刷滴,虽然我估计我8周刷不完,还有好多事啊啊啊啊啊啊啊啊,就是借鉴一下刷题思路嘻嘻。还有一个原因是大一的时候主修c语言,Java实在太不熟悉,但为了找Java方面的工作就刷Java啦。记录开始,大佬路过轻点喷。
2024-11-14 21:33:16
259
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人