当前位置: 首页 > news >正文

力扣热题100题解(c++)—链表

160.相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
在这里插入图片描述
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
自定义评测:
评测系统 的输入如下(你设计的程序 不适用 此输入):
intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

    if (headA == nullptr || headB == nullptr) {return nullptr;}ListNode *ptrA = headA;ListNode *ptrB = headB;while (ptrA != ptrB) {// 如果 ptrA 移动到末尾,则移动到 headBptrA = (ptrA == nullptr) ? headB : ptrA->next;// 如果 ptrB 移动到末尾,则移动到 headAptrB = (ptrB == nullptr) ? headA : ptrB->next;}return ptrA; // 如果相交,返回相交节点;否则,返回 null

206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
在这里插入图片描述

    if (n == 0) return nullptr;ListNode* head = new ListNode(arr[0]);ListNode* current = head;for (int i = 1; i < n; i++) {current->next = new ListNode(arr[i]);current = current->next;}return head;

234.回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
在这里插入图片描述

    vector<int> values;ListNode* current = head;// 1. 将链表值存储到 vector 中while (current != nullptr) {values.push_back(current->val);current = current->next;}// 2. 双指针判断是否回文int left = 0;int right = values.size() - 1;while (left < right) {if (values[left] != values[right]) {return false;}left++;right--;}return true;

141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
在这里插入图片描述

    if (head == nullptr || head->next == nullptr) {return false; // 空链表或只有一个节点,肯定没有环}ListNode *slow = head;ListNode *fast = head->next; // 快指针从 head->next 开始,可以避免一开始就相遇while (fast != nullptr && fast->next != nullptr) {if (slow == fast) {return true; // 快慢指针相遇,说明有环}slow = slow->next;       // 慢指针移动一步fast = fast->next->next;  // 快指针移动两步}return false; // 快指针到达链表末尾,说明没有环

142.环形链表2

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
在这里插入图片描述

 // 查找链表入环的第一个节点ListNode* detectCycle(ListNode *head) 
{if (head == nullptr || head->next == nullptr) {return nullptr; // 空链表或只有一个节点,无环}ListNode *slow = head;ListNode *fast = head;// 首先找到相遇点while (fast != nullptr && fast->next != nullptr) {slow = slow->next;           // 慢指针走一步fast = fast->next->next;     // 快指针走两步if (slow == fast) { // 找到相遇点// 从相遇点开始,另一个指针从头节点开始ListNode *entry = head;while (entry != slow) {entry = entry->next; // 从头节点开始slow = slow->next;    // 从相遇点开始}return entry; // 入环的第一个节点}}return nullptr; // 无环
}

21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
在这里插入图片描述

    // 创建哑节点ListNode* dummy = new ListNode();ListNode* current = dummy;while (list1 != nullptr && list2 != nullptr) {if (list1->val <= list2->val) {current->next = list1;list1 = list1->next;} else {current->next = list2;list2 = list2->next;}current = current->next;}// 处理剩余节点if (list1 != nullptr) {current->next = list1;} else {current->next = list2;}return dummy->next; // 返回新链表的头节点

2.两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
在这里插入图片描述

    ListNode* dummyHead = new ListNode(0); // 哨兵节点方便处理ListNode* current = dummyHead;int carry = 0;while (l1 != nullptr || l2 != nullptr) {int x = (l1 != nullptr) ? l1->val : 0;int y = (l2 != nullptr) ? l2->val : 0;int sum = x + y + carry;carry = sum / 10;current->next = new ListNode(sum % 10);current = current->next;if (l1 != nullptr) l1 = l1->next;if (l2 != nullptr) l2 = l2->next;}if (carry > 0) {current->next = new ListNode(carry);}return dummyHead->next;

19.删除链表的倒数第N个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
在这里插入图片描述

    ListNode* dummyHead = new ListNode(0);dummyHead->next = head;  // 哑节点指向头节点ListNode* fast = dummyHead;ListNode* slow = dummyHead;// 快指针先走 n 步for (int i = 0; i < n; ++i) {if (fast == nullptr) {  // 处理 n 大于链表长度的情况return head;  // 或者抛出异常:throw std::invalid_argument("n is greater than the list length");}fast = fast->next;}// 同时移动快慢指针,直到快指针到达末尾while (fast != nullptr && fast->next != nullptr) {fast = fast->next;slow = slow->next;}// 删除节点slow->next = slow->next->next;return dummyHead->next;

24.两两交换链表中的结点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
在这里插入图片描述

    ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* prev = dummyHead;while (head != nullptr && head->next != nullptr) {ListNode* first = head;ListNode* second = head->next;prev->next = second;first->next = second->next;second->next = first;prev = first;head = first->next;}return dummyHead->next;

138.随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。
返回复制链表的头节点。
用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
val:一个表示 Node.val 的整数。
random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。
你的代码 只 接受原链表的头节点 head 作为传入参数。
在这里插入图片描述

    if (head == nullptr) {return nullptr;}// 1. 创建哈希表:原节点 -> 新节点unordered_map<Node*, Node*> nodeMap;// 2. 第一次遍历:创建新节点,建立映射关系Node* current = head;while (current != nullptr) {nodeMap[current] = new Node(current->val);current = current->next;}// 3. 第二次遍历:设置新节点的 next 和 random 指针current = head;while (current != nullptr) {nodeMap[current]->next = (current->next != nullptr) ? nodeMap[current->next] : nullptr;nodeMap[current]->random = (current->random != nullptr) ? nodeMap[current->random] : nullptr;current = current->next;}// 4. 返回新链表的头节点return nodeMap[head];

148.排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
在这里插入图片描述

    if (head == nullptr || head->next == nullptr) {return head; // 空链表或者只有一个节点的链表,直接返回}// 1. 分割链表:找到链表的中间节点ListNode* middle = findMiddle(head);ListNode* nextToMiddle = middle->next;middle->next = nullptr; // 断开链表,分割成两个子链表// 2. 递归排序:对两个子链表进行递归排序ListNode* left = sortList(head);ListNode* right = sortList(nextToMiddle);// 3. 合并链表:合并两个已排序的子链表return merge(left, right);}private:// 寻找链表的中间节点(快慢指针法)ListNode* findMiddle(ListNode* head) {ListNode* slow = head;ListNode* fast = head->next;  // Fast从 head->next 开始,使得偶数节点时,middle指向前半部分的最后一个节点while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;}return slow;}// 合并两个已排序的链表ListNode* merge(ListNode* list1, ListNode* list2) {ListNode dummyHead(0); // 使用哑节点简化操作ListNode* tail = &dummyHead;while (list1 != nullptr && list2 != nullptr) {if (list1->val < list2->val) {tail->next = list1;list1 = list1->next;} else {tail->next = list2;list2 = list2->next;}tail = tail->next;}// 将剩余的链表添加到尾部if (list1 != nullptr) {tail->next = list1;} else {tail->next = list2;}return dummyHead.next;

146.LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。

class LRUCache 
{
private:int capacity;std::unordered_map<int, int> cache; // 存储 key-value 对std::list<int> lruList;               // 维护 key 的访问顺序 (最近访问的在前面)std::unordered_map<int, std::list<int>::iterator> position; // 存储 key 在 lruList 中的位置
public:LRUCache(int capacity) : capacity(capacity){}int get(int key) {if (cache.find(key) == cache.end()) {return -1; // Key 不存在}// 将 key 移到链表头部,表示最近使用lruList.erase(position[key]);lruList.push_front(key);position[key] = lruList.begin(); // 更新 key 在链表中的位置return cache[key];}void put(int key, int value) {if (cache.find(key) != cache.end()) {// Key 已经存在,更新 value 并移到链表头部cache[key] = value;lruList.erase(position[key]);lruList.push_front(key);position[key] = lruList.begin();} else {// Key 不存在if (cache.size() == capacity) {// 缓存已满,移除最久未使用的元素int lruKey = lruList.back(); // 链表尾部是最近最少使用的 keycache.erase(lruKey);        // 从哈希表中移除position.erase(lruKey);     // 从位置映射中移除lruList.pop_back();          // 从链表中移除}// 插入新的 key-value 对cache[key] = value;lruList.push_front(key);        // 插入到链表头部position[key] = lruList.begin(); // 记录 key 在链表中的位置}}
};

链表定义

链表是有一系列结点组成的,每个结点包括两个部分:

1、存储数据元素的数据域;

2、存储下一个节点地址的指针域。

//单链表
struct ListNode 
{int data;               // 节点数据ListNode* next;        // 指向下一个节点的指针// 构造函数ListNode(int val) : data(val), next(nullptr) {}
};
//双链表
struct DListNode 
{int data;                     // 节点数据DListNode* next;             // 指向下一个节点的指针DListNode* prev;             // 指向前一个节点的指针// 构造函数DListNode(int val) : data(val), next(nullptr), prev(nullptr) {}
};

基本操作

1.插入节点

    // 在链表头插入节点void insertAtHead(int val) {ListNode *newNode = new ListNode(val);newNode->next = head;head = newNode;}// 在链表尾插入节点void insertAtTail(int val) {ListNode *newNode = new ListNode(val);if (head == nullptr) {head = newNode;return;}ListNode *current = head;while (current->next != nullptr) {current = current->next;}current->next = newNode;}// 在指定位置插入节点 (pos 从 1 开始计数)void insertAtPosition(int val, int pos) {if (pos < 1) {std::cerr << "Invalid position!" << std::endl;return;}ListNode *newNode = new ListNode(val);if (pos == 1) {newNode->next = head;head = newNode;return;}ListNode *current = head;for (int i = 1; i < pos - 1 && current != nullptr; ++i) {current = current->next;}if (current == nullptr) {std::cerr << "Position out of range!" << std::endl;delete newNode; // 确保内存不泄漏return;}newNode->next = current->next;current->next = newNode;}

2.删除节点

    // 删除头节点void deleteAtHead() {if (head == nullptr) {std::cerr << "List is empty! Cannot delete from head." << std::endl;return;}ListNode *temp = head;head = head->next;delete temp;}// 删除尾节点void deleteAtTail() {if (head == nullptr) {std::cerr << "List is empty! Cannot delete from tail." << std::endl;return;}if (head->next == nullptr) { // 只有一个节点delete head;head = nullptr;return;}ListNode *current = head;while (current->next->next != nullptr) {current = current->next;}delete current->next;current->next = nullptr;}// 删除指定值的节点void deleteByValue(int val) {if (head == nullptr) {std::cerr << "List is empty! Cannot delete value " << val << "." << std::endl;return;}// 如果要删除的是头节点if (head->val == val) {deleteAtHead();return;}ListNode *current = head;while (current->next != nullptr && current->next->val != val) {current = current->next;}if (current->next == nullptr) {std::cerr << "Value " << val << " not found!" << std::endl;return;}ListNode *temp = current->next;current->next = current->next->next;delete temp;}// 删除指定位置的节点 (pos 从 1 开始计数)void deleteAtPosition(int pos) {if (pos < 1) {std::cerr << "Invalid position!" << std::endl;return;}if (pos == 1) {deleteAtHead();return;}ListNode *current = head;for (int i = 1; i < pos - 1 && current != nullptr; ++i) {current = current->next;}if (current == nullptr || current->next == nullptr) {std::cerr << "Position out of range!" << std::endl;return;}ListNode *temp = current->next;current->next = current->next->next;delete temp;}

3.反转链表

    // 反转链表方法void reverse() {ListNode *prev = nullptr;ListNode *current = head;while (current != nullptr) {ListNode *nextNode = current->next; // 暂存下一个节点current->next = prev;               // 反转当前节点指向prev = current;                     // prev前移到当前节点current = nextNode;                 // current后移到下一个节点}head = prev; // 最后prev为新的头节点}

4.倒数第x个节点

//遍历两次链表ListNode* findNthFromEnd(int n) {if (head == nullptr) {std::cerr << "List is empty!" << std::endl;return nullptr;}// 第一次遍历计算链表长度int length = 0;ListNode *current = head;while (current != nullptr) {length++;current = current->next;}// 计算目标节点的索引int targetIndex = length - n;if (targetIndex < 0) {std::cerr << "n is larger than the length of the list!" << std::endl;return nullptr;}// 第二次遍历找到倒数第 n 个节点current = head;for (int i = 0; i < targetIndex; i++) {current = current->next;}return current;}//快慢指针法
ListNode* findNthFromEnd(int n) 
{ListNode *fast = head;ListNode *slow = head;// 让 fast 指针先移动 n 步for (int i = 0; i < n; ++i) {if (fast == nullptr) {std::cerr << "n is larger than the length of the list!" << std::endl;return nullptr;}fast = fast->next;}// 然后同时移动 fast 和 slow 指针while (fast != nullptr) {slow = slow->next;fast = fast->next;}return slow; // slow 即为倒数第 n 个节点
}

5.是否有环

// 判断链表是否有环
bool hasCycle(ListNode *head) 
{if (head == nullptr || head->next == nullptr) {return false; // 空链表或只有一个节点,不可能有环}ListNode *slow = head;ListNode *fast = head->next;while (fast != nullptr && fast->next != nullptr) {if (slow == fast) {return true; // 快慢指针相遇,存在环}slow = slow->next;           // 慢指针走一步fast = fast->next->next;     // 快指针走两步}return false; // 快指针到达末尾,无环
}

相关文章:

力扣热题100题解(c++)—链表

160.相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…...

MQ消息的不可靠性发生情况与解决方案

文章目录 问题&#xff1a;可能出现的情况&#xff1a; 解决流程与兜底方案第一个方面&#xff1a;确保生产者一定把消息发送到MQ1.生产者重试机制2.生产者确认机制 第二个方面&#xff1a;确保MQ不会将消息丢失数据持久化交换机持久化2.队列持久化3.消息持久化 LazyQueue控制台…...

线程池(五):线程池使用场景问题

线程池&#xff08;五&#xff09;&#xff1a;线程池使用场景问题 线程池&#xff08;五&#xff09;&#xff1a;线程池使用场景问题1 线程池使用场景CountDownLatch、Future1.1 CountDownLatch原理示例代码 1.2 案例一&#xff08;es数据批量导入&#xff09;需求分析实现步…...

第十六届蓝桥杯网安初赛wp

解题列表 根据提示一步一步走&#xff0c;经过猜测&#xff0c;测试出app.py 经过仔细研读代码&#xff0c;找到密钥 编写python代码拿到flag key secret_key9828 flagd9d1c4d9e0d6c29e9aad71696565d99bc8d892a8979ec7a69b9a6868a095c8d89dac91d19ba9716f63b5 newbytearray(…...

8.学习笔记-Maven进阶(P82-P89)

&#xff08;一&#xff09;Maven-08-配置文件加载属性 通过maven可以做版本的集中管理&#xff0c;所以能不能通过maven进行配置文件&#xff08;jdbc.properties&#xff09;的集中管理。 &#xff08;1&#xff09;resource-》jdbc.properties 可以识别$符号 因为只能…...

基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装

Author&#xff1a;Arsen Date&#xff1a;2025/04/26 目录 环境要求实现步骤自定义 ISO安装 ipmitool安装 NFS定义 ks.cfg安装 HTTP编写 Pipeline 功能验证 环境要求 目标服务器支持 IPMI / Redfish 远程管理&#xff08;如 DELL iDRAC、HPE iLO、华为 iBMC&#xff09;&…...

Ubuntu20.04部署Ragflow(Docker方式)

Ubuntu20.04部署Ragflow&#xff08;Docker方式&#xff09; Ubuntu20.04 RagflowRunning RagflowRunning Ollama 由于写这篇博客的时候电脑还没装输入法&#xff0c;所以先用半吊子英文顶着了…关于最后运行ollama的部分可以无视&#xff0c;因为我修改了端口所以才需要这么运…...

【C++语法】类和对象(2)

4.类和对象&#xff08;2&#xff09; 文章目录 4.类和对象&#xff08;2&#xff09;类的六个默认成员函数(1)构造函数&#xff1a;构造函数特点含有缺省参数的构造函数构造函数特点&#xff08;续&#xff09;注意事项构造函数补充 前面总结了有关对象概念&#xff0c;对比 C…...

JDK 17 与 Spring Cloud Gateway 新特性实践指南

一、环境要求与版本选择 1. JDK 17 的必要性 最低版本要求&#xff1a;Spring Boot 3.x 及更高版本&#xff08;如 3.4&#xff09;强制要求 JDK 17&#xff0c;以支持 Java 新特性&#xff08;如密封类、模式匹配&#xff09;和性能优化。JDK 17 核心特性&#xff1a; 密封类…...

深入了解及掌握AppScan不同测试策略的区别

引言 在当今数字化时代,应用程序安全至关重要。IBM AppScan作为一款强大的应用安全测试工具,提供了多种测试策略以适应不同的测试场景和需求。理解这些测试策略的区别,能够帮助安全测试人员更精准地开展测试工作,发现应用程序中潜藏的安全漏洞。本文将结合实际案例,深入剖…...

【Linux】web服务器的部署和优化

目录 nginx的安装与启用--/usr/share/nginx/html默认发布目录 nginx的主配置文件--/etc/nginx/nginx_conf nginx的端口 nginx默认发布文件--index.html nginx默认发布目录 nginx的访问控制 基于IP地址的访问控制 基于用户认证的访问控制 nginx的虚拟主机--/etc/nginx/…...

20250426在ubuntu20.04.2系统上解决问题mkfs.exfat command not found

20250426在ubuntu20.04.2系统上解决问题mkfs.exfat command not found 2025/4/26 21:11 缘起&#xff0c;使用NanoPi NEO开发板&#xff0c;编译FriendlyCore系统&#xff0c;打包eMMC固件的时候报错。 ./build.sh emmc-img -pack sd-card image, used to write frie…...

IDE使用技巧与插件推荐

一、高效使用技巧 1. 快捷键与操作优化 VS Code: 快速导航:Ctrl+P(Windows/Linux)或Cmd+P(macOS)打开文件搜索,输入文件名快速定位。多光标编辑:按住Alt(Windows/Linux)或Option(macOS)点击多个位置,同时编辑多处代码。Zen 模式:Ctrl+K Z(Windows/Linux)或Cmd…...

防火墙规则配置错误导致的网络问题排查

# 防火墙规则配置错误导致的网络问题排查指南 防火墙规则配置错误是网络连接问题的常见原因之一。以下是一套系统的排查步骤和方法&#xff1a; ## 1. 初步症状确认 - **常见表现**&#xff1a; - 特定服务无法访问 - 网络连接时断时续 - 部分IP地址或端口无法通信 …...

线性代数(一些别的应该关注的点)

一、矩阵 矩阵运算&#xff1a;线性变换 缩放、平移、旋转 无所不能的矩阵 - 三维图形变换_哔哩哔哩_bilibili...

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

路由器重分发&#xff08;静态路由OSPF动态路由RIP动态路由&#xff09; 开通端口并配置IP地址 OSPF路由 R1 Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shut Router(config-if)#no shutdown Router(config-if)#ip add 192.168.10.254 255.…...

2.3java运算符

运算符 1. 算术运算符 算术运算符用于执行基本的数学运算&#xff0c;像加、减、乘、除等。 运算符描述示例加法int a 5 3; // a 的值为 8-减法int b 5 - 3; // b 的值为 2*乘法int c 5 * 3; // c 的值为 15/除法int d 6 / 3; // d 的值为 2%取模&#xff08;取余&…...

元数据驱动的 AI 开发:从数据目录到模型训练自动化

元数据驱动的 AI 开发&#xff1a;从数据目录到模型训练自动化 一、引言 在人工智能技术蓬勃发展的当今时代&#xff0c;AI 开发已成为各行业实现创新的核心驱动力。然而&#xff0c;数据规模爆炸式增长、类型复杂多样、来源分散等问题&#xff0c;导致数据管理混乱、模型训练…...

从OpenAI收购实时数据引擎揭示AI数据库进化方向

第一章&#xff1a;一场技术并购背后的“数据战争” 1.1 OpenAI为何盯上Rockset&#xff1f; 当OpenAI宣布收购Rockset时&#xff0c;数据库圈层炸开了锅。这家成立于2016年的公司&#xff0c;其创始人团队堪称“数据库界梦之队”&#xff1a;CTO Dhruba Borthakur曾主导Face…...

Linux0.11内存管理:相关代码

ch13_2 源码分析 boot/head.s 页表初始化&#xff1a; 目标&#xff1a;初始化分页机制&#xff0c;将线性地址空间映射到物理内存&#xff08;前 16MB&#xff09;&#xff0c;为保护模式下的内存管理做准备。核心流程 分配页目录表和页表的物理内存空间&#xff08;通过 .…...

ShaderToy学习笔记 03.多个形状和旋转

1. 正方形和旋转 1.1. 正方形 要绘制一个正方形&#xff0c;我们需要定义一个点到正方形边界的距离函数。对于中心在原点的正方形&#xff0c;其数学表达式为&#xff1a; 对于一个点 p(x,y) 到正方形边界的距离函数可以表示为: d max(|x|, |y|) - r 其中: |x| 和 |y| 分…...

Arduino+ESP01S烧录

这种办法不使用与ThonnyMircopython 前言 这里我们使用烧录器烧录&#xff0c;淘宝十几块钱一个的东西&#xff0c;ESP01S做一个WIFI继电器还是蛮有用的&#xff0c;就是烧录起来不太方便&#xff0c;传统的办法接线麻烦&#xff0c;需多次上电&#xff0c;也可能因为电源问题…...

什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f; 1000道 互联…...

小白自学python第三天

学习python第三天 一、函数 1、函数介绍 函数就是组织好的&#xff0c;可重复使用的&#xff0c;用以实现特定功能的代码块。 现在我们现在需要统计多个字符串长度并且不考虑使用内置函数&#xff0c;你会怎么做&#xff1f;我们先用一种原始人办法看看吧&#xff1a; str…...

【CF】Day44——Codeforces Round 908 (Div. 2) C + Codeforces Round 1020 (Div. 3) DE

C. Anonymous Informant 题目&#xff1a; 思路&#xff1a; 比这场的D难&#xff0c;虽然也不是很难 一个很容易想到的就是由当前状态推出初始状态&#xff0c;那么怎么推呢&#xff1f; 一个性质就是如果对于某一个 x 它可以执行左移操作的话&#xff0c;那么它一定会到数组…...

深入理解HashMap:Hash冲突的解决机制

引言 HashMap 是 Java 集合框架中最常用的数据结构之一&#xff0c;它通过键值对的形式存储数据&#xff0c;并利用哈希算法实现高效的插入、删除和查询操作。然而&#xff0c;在实际使用中&#xff0c;由于哈希函数的有限性和哈希桶数量的限制&#xff0c;不可避免地会出现 哈…...

Datawhale AI春训营二期---使用AI实现老人的点餐效果(关于task2的相关思考)

文章目录 1.多次测试的结果2.分数是如何提高的3.关于上分点拨4.关于task2的收获 1.多次测试的结果 第一次和第二次的&#xff0c;都是使用的baseline: 第三次的&#xff1a; 2.分数是如何提高的 之前的几次都是通过这个baseline进行运行的&#xff0c;然后今天是了解了一下这…...

摩尔投票法详细介绍

原理 摩尔投票法&#xff08;Boyer-Moore Voting Algorithm&#xff09;是一种用于在存在多数元素的数组中&#xff0c;高效找出出现次数超过数组长度一半的元素的算法。其核心思想是通过元素抵消策略&#xff0c;逐步缩小候选范围&#xff0c;最终确定多数元素。 核心假设&a…...

DP之书架

现按一定顺序给出所有要放置于书架上的书&#xff0c;共有 n 本&#xff0c;第 i 本书有一个长度 hi​。 书架有若干层&#xff0c;层与层之间的宽度不一定相等&#xff0c;但是一层的宽度不能小于其上所摆放的任何一本书的长度。同时&#xff0c;每层上的书的长度之和不能超过…...

Python Cookbook-6.11 缓存环的实现

任务 你想定义一个固定尺寸的缓存&#xff0c;当它被填满时&#xff0c;新加入的元素会覆盖第一个(最老的)元素。这种数据结构在存储日志和历史信息时非常有用。 解决方案 当缓存填满时&#xff0c;本节解决方案及时地修改了缓存对象&#xff0c;使其从未填满的缓存类变成了…...

计算机网络基本概念

层次名称主要功能第七层应用层直接面向用户&#xff0c;提供应用服务&#xff08;如浏览网页、发邮件&#xff09;第六层表示层处理数据格式、加密解密、压缩解压第五层会话层建立、管理、终止会话&#xff08;连接&#xff09;第四层传输层提供端到端的数据传输&#xff08;如…...

Eigen线性代数求解器(分解类)

1. 核心分解类概览 Eigen 提供多种矩阵分解方法&#xff0c;适用于不同矩阵类型&#xff08;稠密/稀疏、正定/非正定等&#xff09;&#xff1a; 分解类适用矩阵类型分解形式典型应用场景PartialPivLU方阵&#xff08;可逆&#xff09;APLUAPLU通用线性方程组求解FullPivLU任…...

【Android】四大组件之Service

目录 一、什么是Service 二、启停 Service 三、绑定 Service 四、前台服务 五、远程服务扩展 六、服务保活 七、服务启动方法混用 你可以把Service想象成一个“后台默默打工的工人”。它没有UI界面&#xff0c;默默地在后台干活&#xff0c;比如播放音乐、下载文件、处理…...

VO包装类和实体类分别是什么?区别是什么?

VO包装类和实体类 1. 实体类&#xff08;Entity Class&#xff09;是什么&#xff1f;2. VO包装类&#xff08;Value Object Class&#xff09;是什么&#xff1f;3. VO包装类和实体类的区别4. 实际应用中的区别5. 举例5.1. 实体类&#xff08;Entity Class&#xff09;的定义与…...

如何创建一个C#项目(基于VS2022版)

一.先找到要保存项目的位置,新建一个文件夹 二.打开VisualStudio,选择创建新项目 三.选择模版: 选择操作语言和操作系统 这个是跨平台的 初学在windows系统上,可选择其他,下面这个是不带窗体模版 也可根据需要选择带窗体模版 点击下一步 填写项目名称,选择项目保存位置,填写解…...

RabbitMQ 四种交换机(Direct、Topic、Fanout、Headers)详解

本文是博主在梳理 RabbitMQ 知识的过程中&#xff0c;将所遇到和可能会遇到的基础知识记录下来&#xff0c;用作梳理 RabbitMQ 的整体架构和功能的线索文章&#xff0c;通过查找对应的知识能够快速的了解对应的知识而解决相应的问题。 文章目录 一、直连交换机&#xff08;Dire…...

聚合分销系统开发:短剧小说外卖网盘电商cpscpa系统

聚合分销系统是一种整合了多种分销项目和功能的综合性平台&#xff0c;其核心在于通过CPS&#xff08;按销售付费&#xff09;和CPA&#xff08;按行为付费&#xff09;两种模式&#xff0c;为推广者提供多样化的赚钱机会。以下是聚合分销系统的主要项目和功能&#xff1a; 一…...

【Flume 】Windows安装步骤、配置环境

&#x1f6e0; Flume 是什么&#xff1f; Apache Flume 是一个高效、可靠、可扩展的数据收集系统&#xff0c;通常用于收集日志、流数据&#xff0c;比如收集数据到 HDFS、Kafka 等。 虽然 Flume 本身是为 Linux 服务器设计的&#xff0c;但 在 Windows 本地也是能跑起来的&a…...

【信息系统项目管理师】高分论文:论质量管理和进度管理(智慧旅游平台建设项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划质量管理2、质量保证3、质量控制论文 2019年3月,我作为项目经理,参加了某市智慧旅游平台建设项目,负责项目的全面管理, 该项目以打造一流的国内外生态旅游城市为目标,旨在大数据云平台建设的基…...

一致性哈希详解:优雅地扩展分布式系统

引言 对于哈希算法&#xff0c;相信大家一定不会陌生。它经常被用在负载均衡、分库分表等场景中。例如&#xff0c;在进行分库分表时&#xff0c;我们可能初步根据业务分析&#xff0c;确定 128 张表足以满足当前的数据量需求。此时&#xff0c;当需要插入或查询一条记录时&am…...

pytest 技术总结

目录 一 pytest的安装&#xff1a; 二 pytest有三种启动方式&#xff1a; 三 用例规则&#xff1a; 四 配置框架&#xff1a; 一 pytest的安装&#xff1a; pip install pytest # 安装 pip install pytest -U # 升级到最新版 二 pytest有三种启动方式&#xff1a; 1…...

数据库MySQL学习——day5(总结与复习实践)

文章目录 1、复习总结1.1. 数据库基础1.2. 表操作1.3. 数据操作1.4. 更新与删除 2、实践任务&#xff1a;创建学生管理系统数据库2.1. 数据库设计2.2. 创建表的SQL语句2.3. 插入示例数据2.4. 查询与数据操作示例 3、调试与练习4、 今日小结 1、复习总结 1.1. 数据库基础 数据…...

unity bug

发现一个奇怪的bug&#xff0c;就是某些unity版本打包apk时候不允许StreamingAssets里面有中文文件或者中文路径。比如下图这面这俩都是不行的。 解决方案&#xff1a;中文改为英文即可。 一般报错信息如下&#xff1a; > Configure project :launcher WARNING:The option s…...

苹果计划2026年底前实现美版iPhone“印度造”,以减轻关税及地缘政治风险

基于 6 个来源 据多家媒体报道&#xff0c;苹果公司计划在2026年底前&#xff0c;实现在印度组装销往美国的大部分或全部iPhone手机&#xff0c;以减轻关税和地缘政治紧张局势带来的风险。这一目标意味着苹果需将印度的iPhone产量增加一倍以上&#xff0c;凸显其供应链多元化战…...

新增Webhook通知功能,文档目录树展示性能优化,zyplayer-doc 2.5.1 发布啦!

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;支持在线编辑富文本、Markdown、表格、Office文档、API接口、思维导图、Drawio以及任意的文本文件&#xff0c;支持基于知识库的AI问答&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或…...

【量化交易笔记】17.多因子的线性回归模型策略

前言 上一篇介绍了 因子的评价和分析方法&#xff0c;让我知道如何判断该因子的作用&#xff0c;以及对最终结果的影响&#xff0c;其最大的问题&#xff0c;他只能评价和分析单因子&#xff0c;而对多个因子&#xff0c;不能直接加以评价。我们自然会想到&#xff0c;如果是多…...

五年经验Java开发如何破局创业

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息文章目录 五年经验Java开发如何破局创业一、创业方向筛选与优劣势分析**方向1:技术教育/在线课程开发****方向2:企业级技术服务外包****方向3:技…...

定制一款国密浏览器(11):SM2算法的椭圆曲线参数定义

在国密算法中,SM2 算法是最复杂的,不仅是算法本身比较复杂,其应用场景也复杂。不管 SM2 算法本身有多复杂,作为开发者,我们需要知道的是 SM2 算法是建立在椭圆曲线算法(ECC)之上。关于 SM2 算法和椭圆曲线算法之间的关系,参考我之前的一篇文章: 解读国密非对称加密算…...

RAG技术与应用---0426

大语言模型>3.10 课程中会用到python 工具箱&#xff1a; faiss,modelscope,langchain,langchain_community&#xff0c;PyPDF2 1&#xff09;大模型应用开发的三种模式 提示词没多少工作量&#xff0c;微调又花费时间费用&#xff0c;RAG是很多公司招聘用来对LLM进行应用…...

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…...