自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 222.完全二叉树的节点个数

(写给未来遗忘的自己)

2024-09-07 14:56:40 175

原创 101.对称二叉树

(写给未来遗忘的自己)

2024-09-07 11:08:37 275

原创 226.翻转二叉树

(写给未来遗忘的自己)

2024-09-06 16:26:33 257

原创 二叉树的层次遍历(10道)

(写给未来遗忘的自己)

2024-09-06 09:51:37 428

原创 144.二叉树的前序遍历

前面写过这个代码。下面就是递归遍历的一个代码实现的主逻辑。上面三行代码,中左右根据遍历的顺序写好就可以,开头检查一下是否为空。数组的传入需要以引用的方式,直接可以修改,否则就会一直拷贝,然后主函数的地方的return有问题。

2024-08-30 17:24:53 270

原创 二叉树的基本知识

(写给未来遗忘的自己)

2024-08-30 14:04:16 331

原创 347.前k个高频元素

(写给未来遗忘的自己)

2024-08-28 15:36:37 252

原创 大顶堆和小顶堆

int id;//构造函数 用于创建 Node 对象时初始化 Node 结构体的成员变量。//自定义比较器,小顶堆优先处理优先级最小的//operator() 函数调用操作符重载,允许你把一个对象像函数一样使用。当调用compare的时候,会执行operator()定义的逻辑。// 使用 emplace 直接传递构造函数参数,在堆中原地构造 Node 对象// 构造 Node(1, 5)return 0;

2024-08-27 22:02:27 193

原创 239.滑动窗口最大值

(写给未来遗忘的自己)

2024-08-27 15:55:30 291

原创 150.逆波兰表达式求值

(写给未来遗忘的自己)

2024-08-23 13:49:01 361

原创 1047.删除字符串中所有相邻重复项

(写给未来遗忘的自己)

2024-08-22 21:37:25 246

原创 20.有效的括号

(写给未来遗忘的自己)(实习论文都ok了,接下来猛猛刷题)

2024-08-22 18:21:35 223

原创 225.用队列实现栈

(写给未来遗忘的自己)

2024-08-19 17:30:11 191

原创 232.用栈实现队列

所以需要实现先进先出需要两个队列。这样就实现了先进的数据在第二个队列里面在头部。队列的一些基本使用方法。

2024-08-13 23:00:45 150

原创 stack和queue的基本知识

你可以使用std::list或作为queue的底层容器,只要它们支持必要的操作q.push(1);q.push(2);q.push(3);// 输出 1// 输出 3q.pop();// 输出 2// 输出 2// 输出 Noreturn 0;queue。

2024-07-26 00:24:27 931

原创 459 重复的子字符串

1.如果可以一个字符串重复构成,那么这个字符串的个数(i)肯定可以被总数(n)整除。所以选择可以整除的数,作为轮回,将后面的所有数前i个比对重复。3.判断fast_ptr是否自然结束,自然结束就是找到了,否则就没找到。2.如果不一样就跳出当前循环,如果一样就一直循环到数组结束,(写给未来遗忘的自己)

2024-07-25 22:29:34 165

原创 151 反转字符串中的单词

(写给未来遗忘的自己)

2024-07-24 00:20:00 342

原创 344.反转字符串&&541.反转字符串Ⅱ

循环条件就是first_ptrlast_ptr的时候跳出循环.整体简单,就是利用双指针,一个从前往后,一个从后往前,将当前两个下标对应的数据直接交换(利用。方法一:自己写内部实现。(写给未来遗忘的自己)方法二:(调用C++的。反转函数reverse。

2024-07-19 23:39:17 130

原创 18.四数之和

(采用 long long )(三数之和的时候没考虑,这个是测试案例暴了之后才改的。注意:这个题目的思路和三数之和的思路一样,就是多加一层的for循环。(写给未来遗忘的自己)

2024-07-19 21:43:05 182

原创 常见C++存储数据类型的用法

(写给未来遗忘的自己)

2024-07-18 00:47:00 467

原创 15 三数之和

当出现一组合适的三元数后,第一个数目前还是保持不变的(-2),如果第二个和第三个数出现连续一样的数,那么加进去就是一样的三元数。(1,3,5)(1,4,6)虽然下标不一样,但是出来的三元数一样,所以需要去掉。:如果和上一个数一样,那么后面的两个数只要和上一次一样就可以,就会出现三个数重复。(0,3,4)(1,3,4)就会出现下标一样的数组。由于我们上面说的是排好序的,所以只要挨着的不一样,之后一定不一样。这个和四数之和等于零的区别在于,同一个数组里面,三个数的下标要求完全不一样。(写给未来遗忘的自己)

2024-07-18 00:08:24 165

原创 383.赎金信

2.遍历ransomNote中的字符在哈希数表中查找,如果找不到,或者value小于1,说明同一字符出现的次数不够,如果可以找到就减小一次value的值,直到遍历结束。1.将magazine的字符存储作为一个键存储在std::unordered_map的哈希数表中,value中记录出现的次数。是一个哈希映射(hash map),它可以快速地通过键来查找和修改值。2.std::unordered_map 的键和值的创建。这道题题目思路简单,重点是它对于字符串的一个遍历。为键的条目,并将该条目的值增加 1。

2024-07-16 23:46:23 160

原创 454.四数相加Ⅱ

因为我们的需求是找到有多少组,而不是找到有没有。所以我们需要一个记录和,一个记录出现的次数,采用std::undered_map。利用key记录和的情况,利用value 记录出现的次数。考虑两两数组相加(O(n^2)),然后查找是否有相反数(查找考虑哈希数表,O(1))。哈希选择(std::undered_set std::undered_map)?找到的是四个数的和为0,暴力求解就是四个for循环。(数据太多可能超时)(写给未来遗忘的自己)

2024-07-16 22:55:30 111

原创 1.两数之和

(写给未来遗忘的自己)1.暴力破解法直接两个for循环,直接加2.利用std::undered_map来计算使用同样的map类型的哈希数表,map的三种具体实现写在文末。思路:1.我直到结果target,那我在遍历到的值知道,相当于查找一个差值是否存在,当用到查找的时候就考虑哈希数表(数组,set,map) std::undered_map 的查找和删除复杂度O(1)。2.将遍历过的值作为key,下标作为值存储。当前值和遍历过存储的值中寻找是否有满足的。

2024-07-16 00:25:19 507

原创 202.快乐树

一个整数对10取余就得到最后一位数,然后整数对10取商就剔除最后一位,倒数第二位成为最后一位,一直循环,直到取商为0;利用 unordered_set的哈希数表。查找的速度为log(n)。,永远求解不到解,所以只要不进入死循环就让他一直求解下去。1. 思考如何会出现,如何永远不出现?3. 怎么可以做到求解位数的平方呢?2. 怎么快速查是否相等的和存在?位置上的数平方后的和,如果。的情况,那么就意味着陷入了。(写给未来遗忘的自己)

2024-07-15 23:13:07 124

原创 349.两个数组的交集

而且它的查找、插入和删除操作在平均情况下的时间复杂度接近于O(1)。但在最坏的情况下,时间复杂度可能退化为O(n)。提供了对数时间复杂度的插入、删除和查找操作,即O(log n)。,插入、删除和查找操作的时间复杂度同样是O(log n)。方法1:暴力求解(复杂度为O(n^2))是一个存储唯一元素的关联容器,它基于。1.哈希数表的一种形式 (set)(写给未来遗忘的自己)中插入多个相同的值。2.for循环的遍历。

2024-07-14 00:30:15 280

原创 242.有效的字母异位数

2.字符a到z是对应的ASCII的26个连续的数值,所以将每一个数值减去第一个 ‘a’ 的ASCII得到的就是从0-25的连续数字。知识点:1.字符串本质是字符数组,所以可以使用处理数组的方式获取到string类型里面的每一个字母。3.相同字母出现的次数是否相同,就是看最后数组每一个位置是否都是0。(写给未来的遗忘的自己)

2024-07-13 21:34:01 183

原创 面试题02.07链表相交

注意的点: 相交的是链表,所以是对应的地址一样而不是里面的数据一样。lissnode *aa_head定义的就是指针类型的,所以相等的时候就是指针相等。返回链表就是把整体返回了。(写给未来遗忘的自己)

2024-07-10 00:13:45 175

原创 19.删除链表的倒数第N个节点

删除倒数第n个,就是让一个快速节点和慢节点相距n,那么慢节点的下一个就是需要删除的节点。使用虚拟的头节点,如果头节点需要删除,那就和删除后面的没有区别。注意:(对于链表的处理要学会使用虚拟头,对于好多题都是简单的)(写给未来遗忘的自己)

2024-07-09 00:57:56 124

原创 24.两两交换链表中的节点

1.由于链表是一条绳,所以处理两个数据就需要更新前后的两个连接点,就是四个数据的更新(特殊点对于头节点时候只需要更新后面的就可以,头上再没有)3.需要注意的是,交换至少需要两个,所以小于两个的直接返回自己就可以了。2.结束循环的条件为后面两个节点为空,(写给未来遗忘的自己)

2024-07-09 00:27:04 208

原创 206 反转链表

注意:将当前头节点作为每一次反转后的头节点,下一个节点就当作探索的一个点,那么探索的这个点当为空的时候就是结束的时候,返回的就是每一次记忆的头节点。第一次做的错误点:(循环结束的条件和返回的头节点是那个)(写给未来遗忘的自己)

2024-07-08 23:16:08 219

原创 707 设计链表

整个方法就是一个单链表的方法,建立一个虚的头链表用于操作更加方便,在构造函数里面。利用一个size进行计数的操作。注意:上面的所以汉字标注都是自己第一次写完的bug的地方。主要的问题在于空指针的处理(考虑为空的现象怎么处理)(写给未来遗忘的自己)

2024-07-08 01:27:08 193

原创 203.移除链表元素

4.第一次提交错误的原因是 else里面的内容写在了外面 导致如果连续两个需要移除就报错,所以注意细节,细节决定成败!2. C++中的链表删除元素后断开next的链接就是完成了,但是需要进行delete删除操作,避免内存的泄露。3. next指向的是listNode类型的数据,也就是整个下一个链表的地址。内部包含一个构造函数来初始化一个。(写给未来遗忘的自己)

2024-07-07 21:03:06 188

原创 59.螺旋矩阵Ⅱ

2.对于循环封闭的,保证四条线闭合的左右一直相同。一直保持左闭右开的情况,这样每一行的数据就是n-1个。循环一次开始和结束向内走1,开始由x,y控制开端,结束端由circulation控制。思路:1.对于偶数正好可以走完,但是对于奇数会出现中间的一个方框(n^2)没有值的情况,需要单独处理.所有元素,且元素按顺时针顺序螺旋排列的。(写给未来遗忘的自己)

2024-07-06 18:44:59 223

原创 209 长度最小的子数组

记录一个开始指针,一个结尾指针。结尾指针开始运行,直到满足结果target;就记录一下子数组的个数,如果比最小子数组个数小就更新,否则最小子数组不变。然后将第一个指针对应的从子数组剔除,然后移动第一个指针到下一个位置。注意:需要的是连续的最小子数组。第一次下手直接从大到小排序了,糊涂糊涂糊涂!连续数组用滑动窗口(双指针的一部分)如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。(写给未来遗忘的自己)

2024-07-05 01:50:56 142

原创 977.有序数组的平方

利用了vector的自带的排序方法。1.前后两个数中一个是最大的,从两侧往中间走。直到左侧点超过右侧点停止。将每次取到的值放在新的数组的最后。2.新的数组可以初始化一个内存,这样不用动态处理内存,更节省资源。组成的新数组,要求也按。

2024-07-05 00:41:40 161

原创 27. 移除元素

1.在前后的数组交换的过程中,可能前后都是与val 相同的值,所以只要发生交换就不++ ,对交换过的数值再检查一次。2.可以计数交换的次数,作为循环条件的一部分,到了交换过的数据就停止。元素的顺序可能发生改变。(写给未来遗忘的自己)

2024-07-03 22:08:52 154

原创 704 二分查找

的时候取不到上界就会跳出循环,所以需要特殊处理。同理在数组小于等于2个的时候同样不会进入循环,所以需要处理。1.跳出循环的方式采用的 stare==half_size 所以当stare与end相距仅有1。2. 这道题自己的重点在于边界的处理。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。(写给未来忘记的自己)(刚开始方法比较笨)

2024-07-03 21:37:23 132

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除