2.3k 2 分钟

# 有效的字母异位词 题目链接🔗 class Solution {public: bool isAnagram(string s, string t) { int a[26] = {0}; /* 记录 s 和 t 中每个字母出现的次数 */ for(int i = 0; i < s.size(); i++) { a[s[i] - 'a']++; } for(int i = 0; i < t.size(); i++) {...
1.1k 1 分钟

# 哈希表理论基础 哈希表是根据关键码的值而直接进行访问的数据结构 一般哈希表都是用来快速判断一个元素是否出现在集合里。 # 哈希函数 假如要查询一个名字是否在一所学校里。 用哈希函数把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位学生是否在这所学校里了。 哈希函数通过 hashCode 把名字转化为数值,一般 hashcode...
4k 4 分钟

# 两两交换链表中的节点 题目链接🔗 涉及到对头节点的处理,使用虚拟头节点来统一节点的处理逻辑。 初始时,cur 指向虚拟头节点,然后进行如下三步: class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点 dummyHead->next = head; // 将虚拟头结点指向 head,这样方便后面做删除操作 ListNode* cur = dummyHead;...
4.6k 4 分钟

# 移除链表元素 题目链接🔗 两种操作方式: 直接使用原来的链表进行操作 需要考虑删除头节点时的处理 设置一个虚拟头结点再进行操作 所有节点统一处理 # 使用原来的链表 非头结点:通过前一个节点来移除当前节点 头结点:将头结点向后移动一位 class Solution {public: ListNode* removeElements(ListNode* head, int val) { // 删除头结点 while (head != NULL && head->val == val)...
677 1 分钟

# 链表理论基础 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向 NULL。 链表的入口节点被称为链表的头结点也就是 head。 # 链表类型 # 单链表 单链表中的指针域只能指向节点的下一个节点。 # 双链表 每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。 双链表既可以向前查询也可以向后查询。 # 循环链表 链表首尾相连,可以来解决约瑟夫环问题。 #...
2k 2 分钟

# 长度最小的子数组 题目链接 # 暴力 双 for 循环,一个找起点,一个找终点。时间复杂度O(n2)O(n^2)O(n2),超时。 class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int result = INT32_MAX; int sum = 0; // 总和 int subLen = 0; // 子数组长度 for(int i = 0; i < nums.size(); i++)...
2.1k 2 分钟

# 数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,下标从 0 开始。 增添或者删除数组元素时不可避免的要移动其他元素的地址,因此数组的元素实际上不是删除,而是覆盖。 二维数组的内存空间地址在 C++ 中也是连续的。 # 二分查找 题目链接 难点:根据区间定义做边间处理 两种区间:左闭右闭 [left, right],左闭右开 [left, right)。两种区间内的元素都是相同的,只是表达方式不同。 # 左闭右闭写法 class Solution {public: int search(vector<int>& nums,...
757 1 分钟

首先介绍红黑树的性质: 节点不是红色就是黑色。 根节点为黑色。 叶子结点 (最底层不存放数据的节点) 都为黑且为 NULL 。 红色节点的父节点和子节点都为黑色,即不会存在两个连续的红色节点。 从任一节点到叶子结点的所有路径都包含相同数量的黑色节点。 # 红黑树 插入 配合红黑树插入 (av597092394) 食用。 插入节点的颜色根据以下原则:如果插入的为根节点,则为黑色,其余情况一开始为红色 (插入红色如出现连续的两个红色节点,只需要旋转和变色进行调整)。 红黑树插入操作分为 12 种情况,以下分开讨论。 插入节点的父节点为黑色的 (4...
671 1 分钟

以 32 位编译环境的字节大小为例。 1B: char 、 bool 2B: short 4B: int 、 long 、 float 、指针 8B: double 、 long long 另外 string 所占字节大小根据库所实现的不同而有所差异,但在同一库中都为固定的。 结构体内存对齐规则 类内成员存放的起始相对地址必须是其对齐大小的整数倍。 类的占用大小必须是其最大成员变量对齐大小的整数倍;如不是,则需上调。 C++ 类类型的对齐大小是其最大成员对齐大小,内置类型的对齐大小则是其类型大小。 根据以上规则可以很容易推断以下代码中结构体的内存大小。 struct...