- 博客(19)
- 收藏
- 关注
原创 算法训练营day8-字符串part01-反转字符串、反转字符串II、卡码网-替换数字
记录遍历的区间,如果区间的字符数目达到2 * k则进行翻转前面的k个字符,最后需要对末尾情况进行处理,注意遍历的时候区间长度是endI - startI + 1而最后的末尾处理长度是endI - startI。可以使用reverse()函数直接对数组进行反转,不过没啥意义了,所以还是最好自己写一下交换的逻辑。
2024-07-10 22:10:49
178
原创 算法训练营day7-哈希表part02-四数之和II、赎金信、三数之和、四数之和
的复杂度,然后思考是否能够优化,由于这是四个不同的数组,所以在匹配相加和的时候几乎没啥限制,不用去重,所以可以直接使用unordered_map去记录前两个数组中两个元素相加和出现的个数,然后从另外两个数组中去寻找响应的一半,从而减少时间复杂度。统计两个字符串的字符集中字符出现数量再比较即可。
2024-07-10 09:04:44
256
原创 算法训练营day6-哈希表part01-有效的字母异位词、两个数组的交集、快乐数、两数之和
题目比较简单,两个字符串就是顺序不同而已,有很多种做法,比如将两个字符串排序然后依次比较各位、统计字符串中的字符出现次数再比较是否两个字符串中数量一致等,也可用哈希的思路分别构建26维的数量数组进行统计,将字符映射到对应的数组下标如s[i] - ‘a’。
2024-07-09 00:44:40
258
原创 算法训练营day4-两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表||
涉及到翻转链表需要维护三个变量:pre、fast、slow,分别保存前置节点、翻转前最右边的节点以及翻转前最左边的节点,注意在第一次翻转的时候需要保存好头节点;
2024-07-06 10:19:23
421
原创 算法训练营day3-移除链表元素、设计链表、反转链表
因为实现的时候考虑到便捷快速地定位到头节点和尾节点,以及需要判断索引在不在链表范围内,所以将头节点地址、尾节点地址、链表长度作为状态变量都保存了下来,另外为了方便删除操作设置了冗余节点m_dummyNode。不过需要注意的是,每次在添加和删除节点的时候,一定要记得可能会更新这三个状态变量。对于链表中删除节点,需要保存的信息有:前驱节点、当前节点、后继节点,另外如果涉及到删除链表节点,最好使用一个冗余节点也就是dummyNode节点去操作,会省去一些边界问题的处理(如删除头节点)。
2024-07-06 01:25:36
453
原创 算法训练营day2-有序数组的平方、长度最小的子数组、螺旋矩阵||
Day1 任务:LeetCode 977有序数组的平方、 Leetcode 209 长度最小的子数组、LeetCode 59 螺旋矩阵||LeetCode 977有序数组的平方题目描述数据样例解题思路代码实现Leetcode 209 长度最小的子数组
2024-07-05 00:39:53
253
原创 设计模式-单例模式(C++版)
单例模式在开发当中用的比较广泛,本文章介绍了单例模式的常见实现:饿汉模式、懒汉模式、双重检查锁定以及一些实现过程中遇到的问题
2024-06-04 11:26:40
1063
原创 面试手撕-LRU
LRU(Least Recently Used)即最近最少使用,是一种计算机科学中的资源管理策略,主要用于实现缓存淘汰和页面置换算法。该策略的核心思想是:当系统需要腾出空间以容纳新数据时,优先考虑移除最近最长时间未被访问或使用的项。这样可以保持缓存或内存中存放的是近期最有可能再次被访问的数据,从而提高数据访问的效率和命中率。
2024-05-31 15:32:43
122
原创 std::list中splice成员函数的用法
首先了解std::list容器的介绍:std::list容器在C++的标准模板库(STL)中,其底层实现是采用双向链表(data structure)。更具体地说,它通常实现为一个双向带头循环链表(doubly-linked list with a loop),这意味着每个节点不仅包含指向下一个节点的指针,也包含指向前一个节点的指针,并且链表的头部和尾部通过指针相连形成一个环。
2024-05-31 14:59:34
442
原创 面试手撕-shared_ptr
std::shared_ptr 是C++标准库中的一个智能指针类型,它提供了自动的内存管理功能,通过引用计数机制来决定所管理的对象何时应该被删除。当最后一个指向对象的 shared_ptr 离开作用域或者被重置时,它所指向的对象会被自动删除,从而防止了内存泄漏。
2024-05-30 00:21:57
269
原创 机试真题-模拟题 HW 24.4.10.01
题型为模拟题,但是处理起来比较麻烦,总体涉及到三个步骤:输入日志的处理与信息提取、计费单的保存、费用的计算。需要对容器的使用比较熟练。
2024-04-30 08:53:18
153
原创 面试手撕-删除链表第N个节点-LeetCode 19
思路:第一次遍历先求出链表长度,然后算出指定的位置,第二次遍历的时候找到对应节点进行删除。双指针指针:快慢指针,它们之间的距离为N,然后类似于滑动窗口一起向前。代码随想录 (programmercarl.com)
2024-04-29 11:13:13
133
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人