- 博客(13)
- 收藏
- 关注
原创 算法刷题_两个数组的交集(去重)
选择一个合适的数据结构很重要分析:关于set,C++给提供了如下三种可用的数据结构:①std::setstd::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表,使用unordered_set读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。通过哈希表记录第一个数组的唯一元素,遍历第二个数组查找交集,并通过标记避免重复插入结果,从而高效实现两个数组的去重交集。
2025-01-10 21:53:46
396
原创 算法刷题_哈希表
一般哈希表都是用来快速判断一个元素是否出现集合里。当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2025-01-09 14:47:25
278
原创 算法刷题Day11_回文链表
确定数组列表是否回文很简单,我们可以使用双指针法来比较两端的元素,并向中间移动。一个指针从起点向中间移动,另一个指针从终点向中间移动。public:// 比较数组回文i < j;if (vec[i]!通过快慢指针找到链表的中点位置,然后反转链表的后半部分,再逐一比较前半部分和反转后的后半部分节点值,从而判断链表是否为回文。关键点在于正确实现快慢指针逻辑以及后半部分链表的反转,确保算法在时间复杂度 O(n) 和空间复杂度 O(1) 下高效完成回文判断。
2025-01-08 18:04:30
422
原创 算法刷题_链表篇
简单来说,就是求两个链表交点节点的指针。推荐使用双指针法:它更简洁、高效,不需要显式计算链表长度。在需要快速实现时,双指针法是更好的选择。学习或演示可以用长度对齐法:长度对齐法的逻辑更直观,更容易理解。适合用于学习链表操作或展示思路。
2024-12-25 15:27:18
497
原创 算法刷题_删除链表的倒数第N个结点
双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。间距的值:n+1目的: 确保 slow 指向待删除节点的前一个节点,从而方便删除操作。如何实现: 通过让 fast 在初始化阶段多走一步,建立 n+1 的间距,然后 fast 和 slow 再同时移动直到 fast 到达链表末尾。
2024-12-23 20:53:50
615
原创 算法刷题Day7_翻转链表
提示:以下是本篇文章正文内容,下面案例可供参考问题2中两种方法的区别:递归方法代码更简洁,但可能会因为递归层数过多导致栈溢出。迭代方法更加高效,适合处理较长的链表。递归处理的顺序很重要,需要先处理后续部分的链表,再交换当前节点。改动顺序会破坏链表结构,因为链表是单向的,提前改变指针指向会丢失对剩余链表的引用。递归的本质是依赖返回值,因此先递归处理后续链表,再在递归返回的结果基础上完成当前节点的交换。
2024-12-20 22:30:03
483
原创 算法刷题_设计链表
设计链表:1.获取链表第index个节点的数值2.在链表的最前面插入一个节点3.在链表的最后面插入一个节点4.在链表第index个节点前面插入一个节点5.删除链表的第index个节点终止条件:current->next=nullptr// 创建新节点// 从虚拟头节点开始遍历=nullptr){// 遍历到链表的最后一个节点// 将最后一个节点的 next 指向新节点size++;
2024-12-19 23:15:24
860
原创 女娲补天Day5_链表_移除链表元素
数组在内存中是连续分布的,但是链表在内存中不是连续分布的。int val;//节点上的元素//指向下一节点的指针ListNode(int x):val(x),next(NULL){}//节点的构造函数//使用自己定义的构造函数初始化节点;注:如果使用默认的构造函数,初始化的时候不能直接赋值!例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2024-12-17 15:22:06
230
原创 算法刷题_数组篇
关键点:遍历时边界上的点,使用一个规则去处理每一条边,建议使用左闭右开。在写螺旋矩阵类似的题目时,需要清楚遍历顺序,首先定义好四个顶点的值,while两个条件top<=bottom&&left<=right都需要满足,以顺时针为例,在顶层和右侧遍历后的底层和左侧需要判断时的if的条件容易写反。底层遍历(从右到左):需要检查 top <= bottom。左侧遍历(从下到上):需要检查 left <= right。口诀:遍历哪个方向,先想清楚谁的边界会动。
2024-12-15 19:36:35
944
原创 算法刷题_数组篇
题目:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。滑动窗口方法适用于以下问题:①找到满足条件的最短或最长****子数组。②查找数组或字符串中的特定连续子集(如最长无重复子串)。③动态调整区间,优化问题的时间复杂度。
2024-12-14 22:30:26
1176
原创 算法刷题_数组篇
for(i=0;i<s.size();i++){if(s[i]=object){//假设要移除元素为objectfor(j=i+1;j<s.size();j++){i--;size--;双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。上述移除元素中时间复杂度为O(n^2),双指针方法的复杂度为O(n)。
2024-12-13 23:31:26
490
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人