- 博客(13)
- 收藏
- 关注
原创 代码随想录day16 Java版
每遍历到一个节点就加一即可,选择什么遍历方式都可。最近要搞论文了,课程也比较忙,拖了几天。思路简单,层序或者递归做都行。
2024-03-15 10:58:35 353 1
原创 代码随想录day13 Java版 栈与队列
因为去除操作是按照数值去掉头元素的,假设有一个序列为3,3,在add时,后面的3把前面的3覆盖掉了,如果3是最大元素,在pop时,会把本来应该在窗口里的3,也就是后面的3删除掉,最大值就发生了变化,所以出了问题。感觉这题难度在于考察对java集合的使用,想法很简单,先用HashMap把数和对应出现次数存下来,再根据value进行排序,再输出前k个的键值。后面是改进的算法,使用小顶堆而不是对map进行排序,通过维护一个k大小的小顶堆,该算法时间复杂度为O(nlogk)
2024-03-04 22:18:48 354 1
原创 代码随想录day7 Java版 哈希表2
双指针:先排序,固定i,令l=i+1,r=length-1,由于数组大小是从小到大的,只要保证i不重复,l不重复,则r一定不会重复,因为i和l的去重过程都会导致i和l变大(类似【-1,-1,0,1】,就由于i重复导致错误;可用和上一个比较的方式解决该问题;类似【0,0,0,0】,就由于l重复导致错误,同样和上一个位置比较解决)
2024-02-27 20:59:29 348
原创 代码随想录day4 java版 链表练习
但如何一遍遍历就删除节点,可以考虑双指针。我们希望当快指针遍历完整个链表时,慢指针刚好找到要删除的结点(或者要删除的结点的上一个),由于n是代表倒数第n个结点,不难发现,快指针和慢指针相差n + 1步时,满足上面的设想(上一个结点)。两个指针分别指向两个链表的头部,开始遍历,本链表遍历完遍历另一个链表。如果没有相交,则会同时走到null,若有相交,则会同时走到相交的结点。简单思路很好想,先遍历找到链表的长度,就可以根据n的值得知该节点是第size-n+1个结点。
2024-02-26 16:03:46 315
原创 代码随想录day3 java版 链表
忘记了直接用头插法遍历数组即可反转链表。但是头插法还需要额外的链表空间,空间复杂度较高,因此直接使用了三个指针,在原空间基础上倒转指针指向。的时间复杂度,先遍历链表把数存到数组,再倒叙遍历数组新建一个链表,时间复杂度。帮助掌握java的链表数据结构的基本操作。链表基本操作,加上虚拟头节点会好做许多。学习了链表的基本操作。
2024-02-23 10:35:17 326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人