- 博客(7)
- 收藏
- 关注
原创 代码随想录刷题笔记day6(day5总结休息)
主要思路是建立一个长度为26的哈希数组,对应a-z这26个字母,然后对第一个数组遍历,每个元素通过 s[i]-97 这种方式计算ASCLL码放入哈希数组中统计每种字母出现多少次,再对第二个数组遍历,对每个字母进行回退。这道题主要是有个点“无限循环”的过程中,平方和sum将重复出现,故用一个unodered_set将每一次的sum都储存起来,一旦查到本次sum以前出现过就直接返回false,否则一直循环直到sum ==1。,当Hasharr中的值超过这个范围(比如增加或减少次数很多时),就会发生溢出。
2024-12-03 00:05:19
169
原创 代码随想录刷题笔记day4
这道题需要双指针让后一个指针tail先跑n步然后两个指针开始平行移动,当n=结点个数时tail跑完n步直接指向nullptr,在平行移动时在找tail->next将报错。如果是O(n)空间其实很简单,比如建一个数组储存每个结点的值,把所有遍历过的val赋成0.1,遇到0.1则遇到环,再把val根据数组还原即可。三个指针+虚拟头结点直接秒了,时间复杂度:O(n) 空间复杂度:O(1)。这个题非常好,首先是要比较的是指针是否相同,而非数值;的方法真是太优雅了,我纯抄的,就不放代码了,和链接完全一样。
2024-11-30 23:50:22
489
原创 代码随想录刷题笔记day3
本题的关键点在于,头节点是储存了head->val这个数据的,因此可以考虑:1. 常规的搜索最后还要考虑检查头节点的值;2.使用虚拟头节点最后再删去两个方法的时间复杂度均为O(n),空间复杂度O(1),我都实现了一遍,以下展示第一种做的磕磕绊绊的,但感觉没啥可说的,只能说没必要强行套用虚拟头结点吧,不然还是挺容易乱的。
2024-11-30 21:21:42
248
原创 C++链表基础(一)
/ 定义链表节点结构int val;// 节点值// 指向下一个节点的指针// 构造函数,初始化节点值与C有所不同的是构造函数,在C中定义时不需要构造函数,因为 C 是一种过程式语言,不支持像 C++ 那样的面向对象特性(包括构造函数和析构函数)。// C#手动分配内存并初始化节点// 动态分配内存if (!newNode) {printf("内存分配失败\n");// 初始化数据// 初始化指针为空// 创建一个值为10的节点。
2024-11-30 16:58:55
736
原创 代码随想录刷题笔记day2
但实际上每次找到一个长度为k满足要求的子数组后,后续循环中子数组不必在完全遍历了,因为后续长度超过k的子数组都无意义,因此纯粹采用暴力求解产生了大量冗余信息,而且这个冗余信息是随着子数组长度更新加速增加,考虑每找到一个子数组后固定滑动窗口长度,最终将算法时间复杂度降低到。,主要的核心技巧是维持循环不变量:左闭右开的边。我报了一次bug,是因为循环最后丢了进入内圈的操作。,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
2024-11-29 02:04:44
536
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人