- 博客(9)
- 收藏
- 关注
原创 DAY9 栈与队列(栈与队列相互实现,有效括号,删除串相邻重复项)
用两个(输入栈和输出栈)实现,输出时将输入整体转入输出栈。通过栈实现,遍历遇到与栈顶相同元素时pop,不同则pop。细节:实现peak时,直接复用了pop,降低代码量。一个队列即可,输出前将队首的n-1项置入队尾。栈的经典题目 遍历到'('时,向栈置入')'栈是先进后出,队列则先进先出。注意分析可能出现不匹配的情况。
2025-09-26 23:17:42
152
原创 DAY8 字符串(翻转串中单词,右旋字符串)
移除空格 可以使用双指针 每遇到空格便开始处理,注意首尾。分三步:移除多余空格;逐个单词翻转时 条件应该是空格和尾部单词。使用erase时间复杂度为O(N)同样是整体翻转再部分翻转。或者部分翻转再整体翻转。
2025-09-25 21:31:38
226
原创 DAY6 哈希表(四数相加,赎金信,三数和,四数和)
使用map实现哈希表 key记录ab和 value记录其出现次数,降低了时间复杂度。这里使用双指针而不是哈希表,哈希表在两次for循环中难以实现去重操作,难以剪枝。这里只记录小写字母 故使用数组record【26】 相比map降低了空间消耗。每轮循环定1动2,nums【i】固定,left和right向内收缩。在三数之和的基础上,加了一层for循环。
2025-09-25 18:21:53
190
原创 DAY5 哈希表(字母异位词,数组交集,快乐数,两数和)
哈希表:用空间换时间,可以通过数组,set和map实现。哈希表 判断targer-nums[i]是否在表中。这里用map实现哈希表 因为要同时记录数值和下标。应用了unorder_set 去重,无序。用于检测一个集合中是否出现某元素。哈希表用于记录是否进入了循环。本题应用哈希表遍历数组。暴力算法两边for循环。
2025-09-23 21:22:58
623
原创 DAY4 链表(两两交换节点,删除倒N节点,链表相交,环形链表)
应用快慢指针,慢指针走1,快指针走2;相当于快指针以1的速度追慢指针。若追上则有环,且得到相遇节点。通过数学计算,在头节点和相遇节点同时放置一指针开始移动。二指针相遇节点即为环的入口节点。应用了虚拟头节点和临时节点tmp,通过画图辅助理解链表操作。通过快慢指针找到倒数第n个节点,fast先移动n+1次。虚拟头节点在链表操作中十分重要,能简化操作。先将两链表尾部对齐,再依此判断指针是否相同。分为两步:判断是否为环;
2025-09-22 20:02:20
407
原创 DAY3 链表(移除,设计,翻转)
设置虚拟头节点,便于对链表的头节点进行操作。掌握了双指针法利用pre和cur反转链表。第一次设计有关链表指针的递归,比较懵。加深了对虚拟头节点和cur的理解。结尾考虑head是否被删除。借助了临时指针tmp。
2025-09-20 20:46:48
167
原创 DAY2 数组(长度最小子数组,螺旋矩阵,区间和,开发商买地)
每个元素仅在进入和退出窗口时被操作两次,时间复杂度为O(n)滑动窗口:for循环索引 表示滑动窗口的终止位置。仅当满足条件时,窗口初始位置移动。暴力解法:两个for循环,不断寻找最小子序列;同样利用前缀和,在遍历同步判断。左闭右开,顺时针画圈。记录每一圈的初始位置。
2025-09-20 15:07:32
190
原创 Day1 数组(二分查找,移除元素,有序数组平方)
利用最大元素总分布在数组两端,首尾各设置一指针,通过比较依次向中间移动。注意【)和【】 右边界是否参与比较,决定了right=middle是否减1.暴力解法发现目标元素,将数组通过for循环整体前移。利用left,middle,right三个变量。对于无重复元素的有序数组,查找目标元素。相应地将左右边界移动至middle。middle与targe进行比较。双指针法 利用快慢指针。暴力解法:先平方,后排序。
2025-09-17 21:47:30
395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅