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

O(1) 时间复杂度数据设计题

0x00 preface

所谓 O ( 1 ) O(1) O(1) A P I API API 设计,并不是说,时间复杂度必须是**“总是”常数级别的。
对于一个操作来说,如果他偶尔是 O ( N ) O(N) O(N) 的,大部分时间都是 O ( 1 ) O(1) O(1) 的,并且,这个 O ( 1 ) O(1) O(1) 分摊之后,我们说它的
“均摊时间复杂度为 O ( 1 ) O(1) O(1)”。**

什么是分摊?
对于一个操作,可以分摊的前提是,你这个时间复杂度很高的情况只会执行常数次,那额,分摊到你每一次执行,就是常数+常数还是常数级别,只不过常数比较大罢了。
例如,我们可以看一下官方对维护队列最大值插入操作的分摊解释

删除操作于求最大值操作显然只需要 O ( 1 ) O(1) O(1) 的时间。
而插入操作虽然看起来有循环,做一个插入操作时最多可能会有 n n n 次出队操作。
但要注意,由于每个数字只会出队一次,因此对于所有的 n n n 个数字的插入过程,对应的所有出队操作也不会大于 n n n 次。
因此将出队的时间均摊到每个插入操作上,时间复杂度为 O ( 1 ) 。 O(1)。 O(1)

我们知道,计算机世界中,时间与空间复杂度是很难兼得得,因此,在让我们时间 O ( 1 ) O(1) O(1) 时间复杂度时,辅助数据结构(辅助空间)【往往】是必不可少的。
而且,辅助数据结构(辅助空间)往往也是解题的关键!我们在做题的时候,需要积累这些信息。

  1. 维护栈最值:从 e a s y easy easy h a r d hard hard
    (1)辅助栈保存最值,类似单调栈。需要两个栈。
    (2)在“栈”中保存最小值,一个栈,但是栈中有额外数据。
    (3)逆天差值法, O ( 1 ) O(1) O(1) 空间复杂度!
  2. 维护队列的最值:目前做法唯一,滑动窗口思想,额外 d e q u e deque deque 数据结构。

另外,对于有些特殊的题目,数学公式往往能一击必杀 O ( 1 ) O(1) O(1)


0x01 数学公式

题目描述

面试题 17.19. 消失的两个数字


思路

由于题目中缺少了两个数字,也就是有两个未知数,我们从数学的角度出发,怎么才能在 [ 1 , n ] [1,n] [1,n] 中求出两个未知数 a a a b b b 呢?
很简单,我们只需要构造 a a a b b b 的两个二元方程式即可!
一个方程就是 a + b = x a+b=x a+b=x,这很容易想到,另一个是 a ∗ a + b ∗ b = = y a*a+b*b==y aa+bb==y,求他们的平方和。(当前其他公式也是可以的,但是要注意乘法溢出)
平方和公式( s = 1 2 + 2 2 + . . . + k 2 s=1^2 + 2^2 + ... + k^2 s=12+22+...+k2): s = k ( k + 1 ) ( k + 2 ) 6 s = \frac{k (k + 1) (k + 2)} {6} s=6k(k+1)(k+2)


代码

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {// a * a + b * b = x// a + b = y// get a and b// (a + b) * (a + b) = a * a + b * b + 2 * a * b;// y * y = x + 2 * a * b// 2 * a * b = (y * y - x)// 2 * a * (y - a) = y * y - x//  -> 2ay - 2a*a = y*y - x//  -> 2(aa) - 2y(a) + (y*y-x) = 0;//  -> a = (2y +/- sqry(4y*y - 8(y*y-x))) / 4// b = y - aint n = nums.size() + 2;int a = 0, b = 0;long long x = 0, y = 0;for(int i = 1; i <= n; i ++ )   x += i * i, y += i;// cout << "x: " << x << ' ' << "y: " << y << endl;for(auto &i : nums) x -= i * i, y -= i;// cout << "x: " << x << ' ' << "y: " << y << endl;cout << 2*y << ' ' << y*y-x << endl;a = 2*y - sqrt((4*y*y - 8*(y*y-x)));cout << 4*y*y-8*(y*y-x) << endl;if(a < 0)   a = 2*y + sqrt((4*y*y - 8*(y*y-x)));cout << "a: " << a << endl;a/=4;b = y - a;return {a, b};}
};

参考

数学 && biset
异或


0x02 队列最大值

题目描述

题目描述


思路

维护队列的最大值我们很容易想到滑动窗口,对于滑动窗口来说,我们可以很容易的维护不断添加元素时的最大值,但是当删除元素时,最大值该怎么维护呢?
在滑动窗口中,有一个很重要的性质,那就是如果先入滑动窗口的元素比后入滑动窗口的元素小,那么它就会被滑动窗口删除(这里指的是滑动窗口的头部是最大值的情况)。
先放一放这个结论。
当我们删除原队列的一个元素时,我们肯定希望它也在滑动窗口中也删除(如果存在的话),那么当前元素只有两种可能(存在的话):

  1. 队头
  2. 不是队头

如果它是队头,那么很简单,直接删除。不是的话就麻烦了啊,如果它在队列的中间,难道我们要把它之前所有元素取出来,在删除它,再把拿出来的元素再放回去吗?
这肯定是不行,也不需要的!
因为!如果原队列当前删除的元素不是队头的话,说明,后面肯定有比它大的元素入队,并且作为队头,这意味着什么?
好了,结论可以拿出来用了,这意味着,它在滑动窗口已经被删除了!我们不用再删除它了!


代码

class MaxQueue {
private:queue<int> q;   // 保存队列元素deque<int> maxq; // 保存最大值,设计为队头是最大值
public:MaxQueue() {}int max_value() {return maxq.empty() ? -1 : maxq.front();}void push_back(int value) {q.push(value);while(!maxq.empty() && maxq.back() < value)    maxq.pop_back();  // 滑动窗口maxq.push_back(value);}int pop_front() {if(q.empty())   return -1;int value = q.front();  q.pop();if(maxq.front() == value)   maxq.pop_front();  // 是队头则删除,否则不用管return value;}
};

参考

ref


0x03 栈的最小值

题目描述

155


代码1 – 两个栈

class MinStack {
public:stack<int> cur;stack<int> minx;void push(int val) {int min_val = minx.empty() ? val : min(minx.top(), val);cur.push(val);minx.push(min_val);}void pop() {int last = cur.top();cur.pop();minx.pop();}int top() {return cur.top();}int getMin() {return minx.top();}
};

代码2 – 一个“栈”,栈中有额外信息

class MinStack {
private:
// 其实本质上和两个栈没啥区别,但形式上是一个栈!
// 纯纯骗自己 😭typedef struct node_t {int val;int minx;node_t *next;node_t(int _val, int _minx) : val(_val), minx(_minx), next(nullptr) {}} Node;Node *head;public:
// 不带头节点的链表MinStack() : head(nullptr) {}~MinStack() {while(head) {Node *delNode = head;head = head->next;delete delNode;}}void push(int x) {if(head == nullptr) head = new Node(x, x);else {// 因为模拟的是 stack,所以放到头部(head)Node *newNode = new Node(x, min(x, head->minx));   newNode->next = head;head = newNode;}}void pop() {if(head == nullptr) return ;Node *delNode = head;head = head->next;delete delNode;}int top() {if(head == nullptr) return -1;return head->val;}int getMin() {if(head == nullptr) return -1;return head->minx;}
};/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(x);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

代码3 – 差值法,无辅助空间,LL 类型 stack

class MinStack {
/* 关于空间复杂度
因为有溢出的可能,所以要使用 longlong 来存储
但是一旦使用 longlong,就意味着空间是 int 的两倍
也就意味着和多开一个辅助栈没啥区别
也就是纯纯的自己骗自己 😭
但是这种差值的思想还是很好的 🤔
*//* 具体的思路就是:
stack用来保存当前插入栈顶的值与之前的最小值的差值,同时维护最小值
因此,最小值是真的最小值,但是top不是真的top,它是top与最小值的差值
1.因为,取最小值就很简单了,直接返回 minx2.当我们插入元素时:
例如,按顺序插入2,3,1,1,4。模拟一下便知道了
我们规定,第一个插入的元素,差值为 0。
push(2)
stack(top): 0
minx      : 2
----------------------
push(3),先计算3与当前minx的差值:3-minx=3-2=1
1>=0,说明当前元素不小于minx,先插入元素
stack(top): 0 1
minx      : 2 
不用更新最小值
stack(top): 0 1
minx      : 2 
----------------------
push(1),先计算1与当前minx的差值:1-minx=1-2=-1
-1<0,说明当前元素小于minx,先插入元素
stack(top): 0 1 -1
minx      : 2 2
然后再更新最小值
stack(top): 0 1 -1
minx      : 1
----------------------
push(1),先计算1与当前minx的差值:1-minx=1-1=0
0>=0,不需要更新最小值,先插入元素
stack(top): 0 1 -1 0
minx      : 1
不需要更新
stack(top): 0 1 -1 0
minx      : 1
----------------------
push(4),先计算1与当前minx的差值:4-minx=4-1=3
stack(top): 0 1 -1 0 3
minx      : 1
不需要更新最小值
stack(top): 0 1 -1 0 3
minx      : 13.当我们返回top元素时
(1)如果top(diff)的值<0,说明当前元素比之前的元素小
说明,在该元素插入之后,最小心会更新为它的值
因此,此时top=minx而不是top+minx
你可能会问,哎,当前top不是存储的真实的top和minx的差值吗?
我们不应该返回当前top+minx吗?
是这样的没错,但是,还记得上面的push步骤吗
我们的diff是真实的top于它还没插入时的最小值的差值
如果diff>0,说明最小值没变,那么真实的top自然等于现在的top+minx了
但是如果diff<0,就说明,现在的minx被改变了,被谁改变了呢?
当然就是此时插入的真实的top啊
所以说,如果diff<0,说明此时minx就是真实的top4.其实分析了push和top,那么pop就很好分析了
pop无非就是更新minx
如果top也就是diff>=0,说明插入的元素比minx大,minx不更新
如果top也就是diff<0, 说明插入的元素比minx小,minx更新
*/private:stack<long long> st;    // 存储与“当前”最小值的差值long long minx;         // 最小值public:MinStack() : minx(-1) {}void push(int val) {if(st.empty()) {st.push(0);minx = val;}else {long long diff = val - minx;st.push(diff);// diff < 0 --> val < minxminx = diff < 0 ? val : minx;}}void pop() {if(st.empty())  return ;long long diff = st.top();st.pop();// 之前是 minx_new = minx_old + diff;// 现在是 minx_old = minx_new - diff; if(diff < 0)    minx -= diff;}int top() {if(st.empty())  return -1;long long diff = st.top();if(diff < 0)    return minx;return minx + diff;}int getMin() {if(st.empty())  return -1;return minx;}
};/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(x);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

代码4 – 差值法,int 类型 stack

class MinStack {
public:typedef long long ll;stack<int> stk;int min_val = -INT_MAX;const ll convert_bias = ((ll)INT_MIN)*(-1);MinStack() {}void push(int val) {if(stk.empty()){stk.push(0);min_val = val;}else{ll diff = (ll)val - min_val;if(diff < 0)min_val = val;if(diff < INT_MIN)diff += convert_bias;else if(diff > INT_MAX)diff -= convert_bias;stk.push((int)diff);}}void pop() {assert(!stk.empty());ll diff = (stk.top());stk.pop();if(min_val + diff < INT_MIN)diff -= convert_bias;else if(min_val - diff < INT_MIN)diff += convert_bias;if(diff < 0)min_val = (min_val - diff);}int top() {assert(!stk.empty());ll diff = stk.top();if(min_val + diff < INT_MIN)diff -= convert_bias;else if(min_val - diff < INT_MIN)diff += convert_bias;if(diff<0) return min_val;else return min_val + diff;}int getMin() {return min_val;}
};

相关文章:

O(1) 时间复杂度数据设计题

0x00 preface 所谓 O ( 1 ) O(1) O(1) A P I API API 设计&#xff0c;并不是说&#xff0c;时间复杂度必须是**“总是”常数级别的。 对于一个操作来说&#xff0c;如果他偶尔是 O ( N ) O(N) O(N) 的&#xff0c;大部分时间都是 O ( 1 ) O(1) O(1) 的&#xff0c;并且&a…...

基于Spring AI与Ollama构建本地DeepSeek对话机器人

1、安装ollama&#xff1a; 打开Ollama下载官网&#xff0c;根据自己的操作系统下载相应版本的安装文件。 由于Ollama默认安装在C盘&#xff0c;而Ollama和模型文件都非常大&#xff0c;如果安装在C盘非常占用系统空间&#xff0c;可以使用下面的方法将Ollama安装到指定为止 …...

边缘计算赋能淘宝API:分布式节点缓存降低高并发延迟

以下是关于 “边缘计算赋能淘宝 API&#xff1a;分布式节点缓存降低高并发延迟” 的相关内容介绍&#xff1a; 背景 淘宝作为大型电商平台&#xff0c;每天面临海量的用户访问和高并发请求。在传统的集中式计算架构下&#xff0c;处理如此大规模的请求容易导致网络延迟、响应速…...

Keepalived+LVS+nginx高可用架构

注明&#xff1a;所有软件已经下载好&#xff0c;防火墙和SELinux已经全部关闭 一.搭建NFS 1.服务端 1.创建文件 [rootnfs ~]# mkdir -p /nfs/data 2、修改权限 [rootnfs ~]# chmod orw /nfs/data 3、写配置文件 [rootnfs ~]# cat /etc/exports /nfs/data 192.168.111.118(r…...

CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用

目录 一、背景知识二、使用方法&#xff08;一&#xff09;编译静态库&#xff08;二&#xff09;编译动态库&#xff08;三&#xff09;在主程序中调用库 三、总结 一、背景知识 在C/C开发中&#xff0c;库&#xff08;Library&#xff09;是预先编译好的代码集合&#xff0c…...

技术回顾day3

1.获取文件信息、获取视频信息 走的都是同一个方法&#xff1a;baseController里面的getFile。 在getFile方法里面进行判断文件的类型&#xff0c;判断是不是m3u8类型或者ts类型做一些额外的处理。 获取信息底层就是读取文件&#xff0c;然后写入response的OutputStream ou…...

【dp + 裴蜀定理】P8646 [蓝桥杯 2017 省 AB] 包子凑数 题解

P8646 [蓝桥杯 2017 省 AB] 包子凑数 题解 题目传送门 P8646 [蓝桥杯 2017 省 AB] 包子凑数 一、题目描述 小明发现包子铺有N种蒸笼&#xff0c;每种能放A_i个包子&#xff08;无限供应&#xff09;。问有多少个正整数X无法被这些蒸笼数量的组合表示出来。若无限多个则输出…...

在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面

大家好&#xff0c;我是 V 哥。 《鸿蒙 HarmonyOS 开发之路 卷1 ArkTS篇》已经出版上市了哈&#xff0c;有需要的朋友可以关注一下&#xff0c;卷2应用开发篇也马上要出版了&#xff0c;V 哥正在紧锣密鼓的写鸿蒙开发实战卷3的教材&#xff0c;卷3主要以项目实战为主&#xff0…...

网络华为HCIA+HCIP 策略路由,双点双向

目录 路由策略&#xff0c;策略路由 策略路由优势 策略路由分类 接口策略路由 双点双向 双点双向路由引入特点: 联系 路由回灌和环路问题 路由策略&#xff0c;策略路由 路由策略:是对路由条目进行控制&#xff0c;通过控制路由条目影响报文的转发路径&#xff0c;即路…...

探索Doris:日志分析的新宠,是否能取代老牌ES?

在大数据时代&#xff0c;日志存储与分析对于企业的运营和决策起着至关重要的作用。Elasticsearch&#xff08;简称 ES&#xff09;作为一款广泛应用的开源分布式搜索和分析引擎&#xff0c;长期以来在日志管理领域占据着举足轻重的地位。然而&#xff0c;随着技术的不断发展&a…...

常见电源模块设计

目录 1. 5V电源模块 2. 3.3V电源模块 3. 1.9V电源模块 4. 220V转12V电源模块 1. 5V电源模块 参考电路 电路说明&#xff1a; 这个电路采用的是稳压芯片78L05&#xff0c;我是用的12V的电源模块转成为5V,为后续的供电。 2. 3.3V电源模块 参考电路&#xff1a; 电路说明…...

虚幻引擎控制角色跟随移动方向旋转的方法

在UE5中&#xff0c;要控制角色随移动方向旋转&#xff0c;可以使用蓝图和C两种方式来实现。 使用蓝图 1、选中角色移动组件&#xff0c;勾选将旋转朝向运动。 2、选中当前角色类 取消勾选使用控制器旋转的几个选项 3、这时&#xff0c;摄像机会跟着角色一起旋转。如果不希望…...

Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误

文章目录 Oracle 23ai Vector Search 系列之3 集成嵌入生成模型&#xff08;Embedding Model&#xff09;到数据库示例&#xff0c;以及常见错误使用安装了Oracle 23ai 的虚拟机&#xff08;Oracle Database 23ai Free VirtualBox Appliance&#xff09;1.下载[Oracle VM Virtu…...

RISC-V debug专栏2 --- Debug Module(DM)

Debug Module&#xff08;DM&#xff09;的核心功能 DM 就像一个翻译官&#xff0c;负责把调试器的抽象指令&#xff08;比如 “暂停处理器”&#xff09;转换成硬件能听懂的具体操作。它必须实现以下基本功能&#xff1a; 必要功能&#xff08;必须实现&#xff09;&#xff…...

LLM 分词器Tokenizer 如何从 0 到 1 训练出来

写在前面 大型语言模型(LLM)处理的是人类的自然语言,但计算机本质上只能理解数字。Tokenizer(分词器) 就是架在自然语言和计算机数字表示之间的一座至关重要的桥梁。它负责将我们输入的文本字符串分解成模型能够理解的最小单元——Token,并将这些 Token 转换成对应的数字…...

蓝桥杯冲刺:一维前缀和

系列文章目录 蓝桥杯系列&#xff1a;一维前缀和 文章目录 系列文章目录前言一、暴力的写法&#xff1a;二、一维前缀和的模板&#xff1a; 具体实现&#xff1a; 三、具体例题&#xff1a;求和 1.题目参考&#xff1a;2.以下是具体代码实现&#xff1a; 总结 前言 上次我介绍…...

光学关键尺寸量测设备市场报告:2024年全球市场销售额达到了14.75亿美元

一、引言 光学关键尺寸量测设备作为半导体制造、精密加工等领域的核心工具&#xff0c;其重要性不言而喻。随着科技的飞速发展&#xff0c;这些设备在提升产品精度、缩短研发周期、降低生产成本等方面发挥着越来越关键的作用。本报告旨在深入分析光学关键尺寸量测设备的技术特…...

链表的操作-反转链表

链表 160相交链表 代码 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* h1headA;ListNode* h2headB;while(h1&&h2){if(h1!h2){h1h1->next;h2h2->next;}else{return h1;}}if(h1nullptr){h1headB;}else{h…...

2025 年浙江危化品经营单位考试攻略分享​

浙江的考试由省应急管理部门主导。理论考试突出危化品在电商、物流等新兴业态下的安全管理知识&#xff0c;这与浙江发达的电商产业紧密相关。对危险化学品的环境危害及防治知识考查细致。实际操作考核模拟杭州、宁波等地危化品仓储物流中心的作业情况。​ 报名材料准备齐全后…...

python使用cookie、session、selenium实现网站登录(爬取信息)

一、使用cookie 这段代码演示了如何使用Python的urllib和http.cookiejar模块来实现网站的模拟登录&#xff0c;并在登录后访问需要认证的页面。 # 导入必要的库 import requests from urllib import request, parse# 1. 导入http.cookiejar模块中的CookieJar类&#xff0c;用…...

STM32开发板上生成PWM正弦波

在STM32开发板上生成正弦波通常需要结合定时器&#xff08;TIM&#xff09;、数模转换器&#xff08;DAC&#xff09;或脉宽调制&#xff08;PWM&#xff09;以及时钟系统的配置。以下是分步指南&#xff1a; 方法1&#xff1a;使用DAC 定时器&#xff08;推荐&#xff09; 步…...

Spring Boot 实现文件秒传功能

前言 在开发Web应用时&#xff0c;文件上传是一个常见需求。然而&#xff0c;当用户需要上传大文件或相同文件多次时&#xff0c;会造成带宽浪费和服务器存储冗余。此时可以使用文件秒传技术通过识别重复文件&#xff0c;实现瞬间完成上传的效果&#xff0c;大大提升了用户体验…...

【Vue2】数据绑定_MVVM模型_数据代理_事件处理

目录 一、 数据绑定 1. Vue中有2种数据绑定的方式&#xff1a; 2. 响应式原理 el 与 data 的两种写法 二、 MVVM模型 三、 数据代理 1.回顾Object defineproperty方法 2. 何为数据代理 3.Vue中的数据代理 四、 事件处理 1.事件的基本使用&#xff1a; 2. Vue中的事…...

Python数据类型-dict

Python数据类型-dict 字典是Python中一种非常强大且常用的数据类型&#xff0c;它使用键-值对(key-value)的形式存储数据。 1. 字典的基本特性 无序集合&#xff1a;字典中的元素没有顺序概念可变(mutable)&#xff1a;可以动态添加、修改和删除元素键必须唯一且不可变&…...

win10之mysql server 8.0.41安装

一 mysql server 下载 官网下载地址页面 https://dev.mysql.com/downloads/mysql/二 免装版使用步骤 1 解压 下载完成后,解压文件夹,如下所示: 2 执行安装命令 D:\soft\mysql\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin>mysqld --install Service successfully in…...

解决Oracle PL/SQL中“表或视图不存在“错误的完整指南

解决Oracle PL/SQL中"表或视图不存在"错误的完整指南 前言问题概述根本原因分析一、 编译时与运行时验证差异二、权限问题三、 Schema命名问题 实际案例演示案例1&#xff1a;动态分表查询案例2&#xff1a;权限不足的场景 实用排查步骤排查流程图最佳实践建议解决方…...

从实用的角度聊聊Linux下文本编辑器VIM

本文从实用的角度聊聊Vim的常用命令。何为实用&#xff1f;我举个不实用的例子大家就明白了&#xff0c;用vim写代码。;) “vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用&#xff0c;和Emacs并列成…...

MySQL的进阶语法8(SQL优化——insert、主键、order by、group by、limit、count和update)

目录 一、插入数据 1.1 insert 1.2 大批量插入数据 二、主键优化 2.1 数据组织方式 2.2 页分裂 2.2.1 主键顺序插入效果 2.2.2 主键乱序插入效果 2.3 页合并 2.4 索引设计原则 三、order by优化 3.1 执行以下两条语句&#xff08;无索引&#xff09; 3.2 创建索引…...

STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出

目录 前言 输出时的GPIO控制部分 标准库是如何操作寄存器完成GPIO驱动的初始化的&#xff1f; 问题1&#xff1a;如何掌握GPIO的编程细节——跟寄存器如何打交道 问题2&#xff1a;哪些寄存器&#xff0c;去哪里找呢&#xff1f; 问题三&#xff0c;寄存器的含义&#xff…...

FreeRTOS源码下载分享

FreeRTOS源码下载分享 官网下载太慢了&#xff0c;分享下FreeRTOSv202411 FreeRTOSv202411.00.zip 链接: https://pan.baidu.com/s/1P4sVS5WroYEl0WTlPD7GXg 提取码: g6aq...

PyArrow 核心技术与应用:高效数据处理与跨生态集成实践

Apache Arrow 作为列式内存数据格式的行业标准&#xff0c;其 Python 接口 PyArrow 正在重塑数据科学生态。本文深入解析 PyArrow 的核心计算能力&#xff0c;涵盖统计函数、分组聚合、窗口操作及跨库集成&#xff0c;通过完整代码示例演示如何利用其高性能特性优化数据处理流程…...

机试题——PCB印刷电路板布线

题目描述 在 PCB 印刷电路板设计中&#xff0c;器件之间的连线需要避免线路的阻抗值增大&#xff0c;而且器件之间还可能存在其他干扰源。为了简化问题&#xff0c;我们将电路板简化为一个 ( M * N ) 的矩阵&#xff0c;每个位置&#xff08;单元格&#xff09;的值表示其源干…...

数据化管理(一)---什么是数据化管理

目录 一、什么是数据化管理1.1 “聪明”的销售人员1.2 数据化管理的概念1.3 数据化管理的意义1.4 数据化管理的四个层次1.4.1 业务指导管理1.4.2 营运指导管理1.4.3 经营策略管理1.4.4 战略规划管理 1.5 数据化管理流程图1.5.1 分析需求1.5.2 收集数据1.5.3 整理数据1.5.4 分析…...

Android 10.0 通过广播控制systemui状态栏动态显示和隐藏功能实现

1.前言 在10.0的系统rom定制化开发中&#xff0c;在某些特定的产品开发中&#xff0c;需要通过接口来控制系统状态栏的显示和隐藏&#xff0c; 所以就需要了解systemui状态栏的显示构造过程&#xff0c;然后通过相关接口来显示和隐藏状态栏&#xff0c;接下来就来 实现相关的功…...

Linux服务器安装MinerU

安装MinerU 为了确保项目的稳定性和可靠性&#xff0c;我们在开发过程中仅对特定的软硬件环境进行优化和测试。这样当用户在推荐的系统配置上部署和运行项目时&#xff0c;能够获得最佳的性能表现和最少的兼容性问题。 这里我们以基础的 [[Linux服务器部署PaddleX实战教程]] 使…...

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引&#xff1a;屏幕前的你还在AI智能搜索框这样搜索吗&#xff1f;“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” &#xff0c;。看到此篇文章的小伙伴们&#xff01;请准备好你的思维魔杖&#xff0c;开启【霍格沃茨模式】&#xff0c;看我如何更新秘密的【知识炼金…...

Vite 内联 CSS 和 JS 的解决方案

使用 vite-plugin-singlefile&#xff08;推荐&#xff09; 这个插件专门用于将整个 Vite 应用打包成单个 HTML 文件&#xff0c;内联所有 JS 和 CSS。 安装 pnpm i vite-plugin-singlefile -D配置 vite.config.js import { defineConfig } from vite import { viteSingleF…...

致敬生物信息学先驱:玛格丽特·戴霍夫(Margaret Dayhoff,1925-1983)

李升伟 编译 社论 发布于&#xff1a;2025年3月11日 《自然-计算科学》第五卷 第187页&#xff08;2025年&#xff09; 在玛格丽特戴霍夫&#xff08;Margaret Dayhoff&#xff0c;1925-1983&#xff09;百年诞辰之际&#xff0c;我们聚焦这位先驱在生物信息学领域留下的不朽…...

Knife4j文档请求异常 空指针

打开swagger文档报空指针异常 java.lang.NullPointerException: nullat springfox.documentation.oas.mappers.SchemaMapper.model(SchemaMapper.java:97)at springfox.documentation.oas.mappers.SchemaMapper.mapModel(SchemaMapper.java:85)at springfox.documentation.oas…...

笔记2——网络参考模型

一、OSI参考模型&#xff1a; 应用层&#xff1a; 报文 给应用程序提供接口 表示层&#xff1a; 进行数据格式的转换 会话层&#xff1a; 在通讯双方之间建立、管理和终止会话 传输层&#xff1a; 数据段&#xff1b;建立、维护、取消一次端到端的数据传输过程&#xff1b;控制…...

Spring AOP + Redis缓存设计实战:基于注解的优雅三防方案(击穿/穿透/雪崩)

文章目录 摘要 正文一、缓存设计的痛点与破局二、核心代码拆解&#xff1a;四层防御设计1. 注解驱动&#xff08;ZywCacheable&#xff09;2. 缓存击穿防护&#xff1a;双重检查锁3. 缓存穿透防护&#xff1a;空值标记4. 缓存雪崩防护&#xff1a;TTL随机算法 三、生产环境最佳…...

洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构

题目描述 《庄子》中说到&#xff0c;“一尺之棰&#xff0c;日取其半&#xff0c;万世不竭”。第一天有一根长度为 a a a 的木棍&#xff0c;从第二天开始&#xff0c;每天都要将这根木棍锯掉一半&#xff08;每次除 2 2 2&#xff0c;向下取整&#xff09;。第几天的时候木…...

jdk21新特性详解使用总结

jdk21新特性详解总结 1.StringBuilder和StringBuffer新增了一个repeat方法 /*** Java 21的StringBuilder和StringBuffer新增了一个repeat方法*/public static void repeatStr(){var sbnew StringBuilder().repeat("*",10);System.out.println(sb);}运行结果如下&…...

解码 collections.Counter - 频率统计的利器

文章目录 前言一、什么是 collections.Counter?二、 基本用法:从创建到访问2.1 创建 Counter 对象2.2 访问计数三、 核心功能:更新与排序3.1 更新计数3.2 获取常见元素四、高级用法:数学运算与转换4.1 数学运算4.2 类型转换五、 实际应用:Counter 的威力5.1 词频统计5.2 在…...

Mysql基础笔记

# 1.SQL数据类型 可以去这篇文章看看&#xff1a; 最全 SQL 字段类型&#xff08;4种&#xff09;、属性&#xff08;6种&#xff09;总结:https://blog.csdn.net/weixin_45654582/article/details/119157403 ### 一.整数类型 ### 二.小数类型(2种) 1、浮点型&#xff1a;…...

HttpClient-03.入门案例-发送POST方式请求

一.发送POST方式请求 编写代码&#xff1a; 1.创建一个HttpClient对象 2.创建一个HttpGet请求 3.发送http的get请求并获得响应对象 4.通过发送GET请求获取的CloseableHttpResponse响应对象来获取状态码以及响应数据 package com.sky.test;import com.alibaba.fastjson.JS…...

Oracle数据库数据编程SQL<3.6 PL/SQL 包(Package)>

包是Oracle数据库中一种重要的PL/SQL程序结构&#xff0c;它将逻辑相关的变量、常量、游标、异常、过程和函数组织在一起&#xff0c;提供了更好的封装性和模块化。在大型项目中&#xff0c;可能有很多模块&#xff0c;而每一个模块又有自己的存过、函数等。而这些存过、函数默…...

每日一题---买卖股票的最好时机(一)、(二)

目录 买卖股票的最好时机(一) 一、题目链接&#xff1a;买卖股票的最好时机(一)_牛客题霸_牛客网 二、解题思路 三、代码实现 买卖股票的最好时机&#xff08;二&#xff09; 一、题目链接&#xff1a;买卖股票的最好时机(二)_牛客题霸_牛客网 ​编辑 二、解题思路 …...

XSS漏洞的分类解释和演示实验

XSS漏洞&#xff1a;跨站脚本攻击(cross site scripting)&#xff0c;为了不和CSS混淆而改名。攻击者网web插入恶意script代码&#xff0c;当用户浏览页面时&#xff0c;嵌入的代码会被执行。 危害&#xff1a;盗取各类用户&#xff0c;强制发送电子邮件&#xff0c;网站挂马等…...

【Pandas】pandas DataFrame info

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于获取 DataFrame 的行索引DataFrame.columns用于获取 DataFrame 的列标签DataFrame.dtypes用于获取 DataFrame 中每一列的数据类型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…...