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

单调队列queue

1.单调队列(Monotonic Queue)

单调队列是一种特殊的队列,它的元素按照单调性(递增或递减)的顺序排列。简单来说,单调队列会维护一个元素单调递增或递减的顺序,在队列中元素会根据当前队列的元素和新加入的元素来进行更新。

基本概念

  1. 单调递增队列

    • 对于每个进入队列的元素,队列中的元素始终保持递增(从队头到队尾)。
    • 如果新元素小于队尾元素,队尾元素会被弹出,直到新元素大于或等于队尾元素。
  2. 单调递减队列

    • 与递增队列相反,队列中的元素始终保持递减(从队头到队尾)。
    • 如果新元素大于队尾元素,队尾元素会被弹出,直到新元素小于或等于队尾元素。

应用场景

  1. 滑动窗口问题

    • 常用于处理一些滑动窗口的最大值或最小值问题。
    • 如:给定一个数组,要求求出每个大小为k的滑动窗口内的最大值或最小值。
  2. 范围查询

    • 在一些区间问题中,可以通过单调队列高效地维护某些信息,如最大值或最小值。

单调队列的基本操作

  • 插入元素:新元素进入队列时,如果它不满足单调性,需要将队尾的元素弹出,直到队列中的元素保持单调性。

  • 弹出元素:元素离开队列时,队头的元素会被弹出。

  • 获取队头元素:队头元素即为当前队列中最值(最大值或最小值)。

基本的单调队列实现(滑动窗口最大值)

#include <iostream>
#include <deque>
#include <vector>
using namespace std;vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> result;deque<int> dq;  // 存储窗口中的元素下标,队列是单调递减的for (int i = 0; i < nums.size(); i++) {// 弹出不在当前窗口内的元素if (!dq.empty() && dq.front() <= i - k) {dq.pop_front();}// 保持队列单调递减,弹出队尾小于当前元素的元素while (!dq.empty() && nums[dq.back()] <= nums[i]) {dq.pop_back();}// 将当前元素下标插入队列dq.push_back(i);// 当窗口大小达到 k 时,队头就是最大值if (i >= k - 1) {result.push_back(nums[dq.front()]);}}return result;
}int main() {vector<int> nums = {1,3,-1,-3,5,3,6,7};int k = 3;vector<int> res = maxSlidingWindow(nums, k);for (int num : res) {cout << num << " ";}cout << endl;return 0;
}

 

代码解释

  1. 队列维护:使用 deque<int> dq 来存储窗口中元素的下标。

    • 维护队列是单调递减的,即队列的队头是当前窗口的最大值对应的下标。
  2. 窗口更新

    • 每当移动窗口时,先移除不在窗口内的元素(即下标小于 i - k + 1 的元素)。
    • 然后确保队列中的元素是单调递减的,弹出队尾小于当前元素的元素。
  3. 窗口内最大值

    • 当窗口的大小达到 k 时,队头的元素对应的就是当前窗口的最大值,因此可以将 nums[dq.front()] 加入结果。

时间复杂度

  • 时间复杂度O(n),其中 n 是数组的大小。每个元素最多入队一次,出队一次,因此时间复杂度是线性的。

  • 空间复杂度O(k),队列最多存储 k 个元素的下标。

单调队列的拓展

除了在滑动窗口最大值问题中的应用,单调队列还可以应用于其他问题,下面是几个典型的扩展和优化。

1. 计算区间最小值/最大值
  • 在给定区间内维护最大值或最小值,单调队列可以通过类似的方法帮助维护区间内的最值。
2. 单调队列解法的优化
  • 优化查询和更新操作:一些问题中,查询操作和更新操作都可以在 O(1) 时间内完成,而对于较大的区间,可以通过分块和双指针的技巧进一步优化。
3. 维护多个窗口的最大值/最小值
  • 可以使用多个单调队列,分别维护不同的窗口的最值,从而满足多个窗口的查询要求。
4. 最小栈与最大栈的扩展
  • 在实现栈的最大值或最小值时,可以使用单调队列来优化栈内的查询。

复杂度优化

  • 空间优化:对于一些问题,我们可以通过双端队列的变种来优化空间复杂度,避免额外的空间浪费。

总结

  • 单调队列是一个非常强大的工具,特别适用于维护动态区间的最大值或最小值,常用于解决滑动窗口相关问题。
  • 它的核心思想是利用队列保持元素的单调性,从而在窗口或区间中高效地获取最值。
  • 在滑动窗口问题中,单调队列的应用使得时间复杂度可以优化到 O(n),从而大大提高了效率。

2.题

1.算法竞赛进阶指南

思路:用bfs查找所有的方式

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>using namespace std;const int N = 4;
char graph[N][N];
int target = 0; // 目标状态,所有手柄都打开// 将当前状态转换为整数
int stateToInt(const char graph[N][N]) {int state = 0;for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {if (graph[i][j] == '-') {state |= (1 << (i * N + j));}}}return state;
}// 将整数转换回状态
void intToState(int state, char graph[N][N]) {for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {graph[i][j] = (state & (1 << (i * N + j))) ? '-' : '+';}}
}// 翻转手柄 [x, y] 及其所在行和列的所有手柄
void toggle(char graph[N][N], int x, int y) {for (int i = 0; i < N; ++i) {if (graph[x][i] == '+') graph[x][i] = '-';else graph[x][i] = '+';if (graph[i][y] == '+') graph[i][y] = '-';else graph[i][y] = '+';}if (graph[x][y] == '+') graph[x][y] = '-';else graph[x][y] = '+';
}struct State {int state;vector<pair<int, int>> moves;
};int main() {// 读取输入for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {cin >> graph[i][j];}}// 初始化目标状态target = (1 << (N * N)) - 1; // 所有手柄都打开的状态// 使用BFS寻找最短路径queue<State> q;unordered_map<int, bool> visited;int initialState = stateToInt(graph);q.push({initialState, {}});visited[initialState] = true;while (!q.empty()) {State current = q.front();q.pop();if (current.state == target) {cout << current.moves.size() << endl;for (auto& move : current.moves) {cout << move.first + 1 << " " << move.second + 1 << endl;}return 0;}for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {char tempGraph[N][N];intToState(current.state, tempGraph);toggle(tempGraph, i, j);int nextState = stateToInt(tempGraph);if (!visited[nextState]) {visited[nextState] = true;auto newMoves = current.moves;newMoves.emplace_back(i, j);q.push({nextState, newMoves});}}}}return 0;
}

 

2.

思路:模板题

 

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;void func(vector<int>& nums) {vector<int>dis(nums.size(), 0);stack<int>st;for (int i = 0; i < nums.size(); i++) {while (!st.empty() && nums[i] > nums[st.top()]) {dis[st.top()] = i + 1;st.pop();}st.push(i);}for (int i = 0; i < dis.size(); i++)cout << dis[i] << " ";
}int main() {int n; cin >> n;vector<int>nums(n, 0);for (int i = 0; i < n; i++)cin >> nums[i];func(nums);return 0;
}

3. 

思路:模板题

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;void func(vector<int>& nums) {vector<int>dis(nums.size(), 0);stack<int>st;for (int i = 0; i < nums.size(); i++) {while (!st.empty() && nums[i] > nums[st.top()]) {dis[st.top()] = i + 1;st.pop();}st.push(i);}for (int i = 0; i < dis.size(); i++) {cout << dis[i] << endl;}
}int main() {int n; cin >> n;vector<int>nums(n, 0);for (int i = 0; i < n; i++)cin >> nums[i];func(nums);return 0;
}

4 .

 

思路:根据题意结合单调栈即可

#include <iostream>
#include<cstdio>
#include <vector>
#include <stack>
#include <algorithm>using namespace std;#define ll unsigned long 
ll ans, x, n;struct f {ll s, i;
};
stack<f> st;int main(){cin >> n;for (ll i = 1; i <= n; i++){cin >> x;while (!st.empty() && x >= st.top().s){ans ^= st.top().i;st.pop();}st.push({ x, i });ans ^= i;cout << ans << endl;}return 0;
}

5.

思路: 用俩个单调栈,一个递增,一个递减,在用upper_bound来找位置,通过max确定最大值

#include <cstdio>
#include <set>
#include <algorithm>const int maxn = 100005;int n, ans, tx, tn;
int a[maxn], sx[maxn], sn[maxn];int main() {scanf("%d", &n);for (int i = 1; i <= n; ++i) scanf("%d", a + i);for (int i = 1; i <= n; ++i) {while (tn && a[sn[tn]] >= a[i]) --tn;while (tx && a[sx[tx]] < a[i]) --tx;int k = std::upper_bound(sn + 1, sn + 1 + tn, sx[tx]) - sn;if (k != (tn + 1)) {ans = std::max(ans, i - sn[k] + 1);}sn[++tn] = i;sx[++tx] = i;}printf("%d\n", ans);return 0;
}

6.

思路: i 左右俩边是不是有一样的人,有same【i】++,同时一样高的人也是面对面,也++

#include<iostream>
#include<cstdio>
#include<algorithm>using namespace std;long long n,s[500010],a[500010],top,sum,same[500010];
int main(){cin>>n;for(int i=1; i<=n; i++)scanf("%d",&a[i]);for(int i=1; i<=n; i++){while(top>0&&a[i]>=a[s[top-1]]){if(a[i]==a[s[top-1]])same[i]=same[s[top-1]]+1;sum++;sum+=same[s[top-1]];top--;}if(top>0)sum++;s[top++]=i;}cout<<sum;return 0;
}

7.

思路: 方向用单调栈来解题,模板题

#include <iostream>
#include <vector>
#include <stack>using namespace std;int main() {int n;cin >> n;vector<int> h(n);for (int i = 0; i < n; i++) {cin >> h[i];}stack<int> st;long long total = 0;for (int i = n - 1; i >= 0; i--) {while (!st.empty() && h[st.top()] < h[i]) {st.pop();}if (!st.empty()) {total += st.top() - i - 1;} else {total += n - i - 1;}st.push(i);}cout << total << endl;return 0;
}

 8.

思路:单调队列的模板题

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
#include<queue>using namespace std;void func(vector<int>& nums, int k) {vector<int> result;deque<int> dq;for (int i = 0; i < nums.size(); i++) {if (!dq.empty() && dq.front() <= i - k) dq.pop_front();while (!dq.empty() && nums[dq.back()] >= nums[i]) dq.pop_back();dq.push_back(i);if (i >= k - 1) result.push_back(nums[dq.front()]);}for (int i = 0; i < result.size(); i++)cout << result[i] << " ";cout << endl;result.clear(); dq.clear();for (int i = 0; i < nums.size(); i++) {if (!dq.empty() && dq.front() <= i - k)  dq.pop_front();while (!dq.empty() && nums[dq.back()] <= nums[i]) dq.pop_back();dq.push_back(i);if (i >= k - 1) result.push_back(nums[dq.front()]);}for (int i = 0; i < result.size(); i++)cout << result[i] << " ";
}int main() {int n, m; cin >> n >> m;vector<int>nums(n, 0);for (int i = 0; i < n; i++)cin >> nums[i];func(nums, m);return 0;
}

9. 

 

思路:卡了好久的题,用二分答案+单调队列移动窗口来写

#include <bits/stdc++.h>
using namespace std;int n, D, l, r;
struct WATER {int x, y;
} p[100010];int ans = 2100000000;
int q1[100010], q2[100010];
int p1[100010], p2[100010];
int head1 = 1, tail1 = 1, head2 = 1, tail2 = 1;bool check(int k) {int L = 1;q1[1] = p[1].y;p1[1] = p[1].x;q2[1] = p[1].y;p2[1] = p[1].x;head1 = 1, tail1 = 1, head2 = 1, tail2 = 1; // 初始化队列和 head,tailfor (int i = 2; i <= n; i++) {while ((p[i].x - p[L].x) > k) L++; // 控制左端可以到哪while (p1[head1] < p[L].x && head1 <= tail1) // 队头出队head1++;while (p2[head2] < p[L].x && head2 <= tail2) // 队头出队head2++;while (q1[tail1] <= p[i].y && head1 <= tail1) // 队尾出队tail1--;p1[++tail1] = p[i].x;q1[tail1] = p[i].y; // 队尾入队while (q2[tail2] >= p[i].y && head2 <= tail2) // 队尾出队tail2--;p2[++tail2] = p[i].x;q2[tail2] = p[i].y; // 队尾入队if ((q1[head1] - q2[head2]) >= D) return 1; // 如果时间差满足条件}return 0;
}bool cmp(WATER a, WATER b) {return a.x < b.x; // 按 x 坐标升序排列
}int main() {scanf("%d%d", &n, &D);for (int i = 1; i <= n; i++) {scanf("%d%d", &p[i].x, &p[i].y);}l = 0, r = 1000010;sort(p + 1, p + n + 1, cmp); // 按 x 坐标升序排序while (l <= r) { // 二分查找宽度int mid = (l + r) / 2;if (check(mid)) { // 如果当前宽度可以满足要求r = mid - 1;ans = min(ans, mid);} else {l = mid + 1;}}if (ans == 2100000000) printf("-1");else printf("%d", ans);return 0;
}

10. 

思路:看的题解思路写的

思路:我们首先需要用一个map去统计每个数出现的次数,然后快排一下,去重,跑一遍单调队列,我们在单调队列中去处理结果

我们用sum去表示过程中的值,ans表示最终的最大值

如果队列不为空并且当前要插入的元素和队尾元素差值不是1,那么去更新最大值,然后将sum变为0 

如果队列不为空,但是插入的值和第一个元素的值差值大于等于k,说明插入的元素要多于k了,因此我们需要将队首元素弹出,并且sum-队首元素的次数

#include<bits/stdc++.h>
using namespace std;int t;
int n, k;
int a[200005];
map<int, int> mp;struct node{int x;int cnt;
};
deque<node> que;
void solve(){cin >> n >> k;mp.clear();for(int i = 1; i <= n; i++) {cin >> a[i];mp[a[i]]++;}sort(a + 1, a + 1 + n);int len = unique(a + 1, a + 1 + n) - (a + 1);vector<node> q(len + 1);for(int i = 1; i <= len; i++) {q[i].x = a[i];q[i].cnt = mp[a[i]];}int sum = 0;int ans = 0;for(int i = 1; i <= len; i++){if (!que.empty() && q[i].x - 1 != que.back().x){ans = max(ans, sum);sum = 0;while (!que.empty()) {que.pop_back();}}while (!que.empty() && que.front().x<=q[i].x-k){ans = max(ans, sum);sum -= que.front().cnt;que.pop_front();}que.push_back(q[i]);sum += q[i].cnt;ans = max(ans, sum);}cout << ans << "\n";while (!que.empty()){que.pop_back();}
}signed main(){ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t--)solve();return 0;
}

 

相关文章:

单调队列queue

1.单调队列&#xff08;Monotonic Queue&#xff09; 单调队列是一种特殊的队列&#xff0c;它的元素按照单调性&#xff08;递增或递减&#xff09;的顺序排列。简单来说&#xff0c;单调队列会维护一个元素单调递增或递减的顺序&#xff0c;在队列中元素会根据当前队列的元素…...

【漫话机器学习系列】091.置信区间(Confidence Intervals)

置信区间&#xff08;Confidence Intervals&#xff09;详解 1. 引言 在统计学和数据分析中&#xff0c;我们通常希望通过样本数据来估计总体参数。然而&#xff0c;由于抽样的随机性&#xff0c;我们不可能得到精确的总体参数&#xff0c;而只能通过估计值&#xff08;如均值…...

UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x99

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x99 这个错误通常发生在你尝试使用 GBK 编码来解码一个包含非GBK编码字符的文件时。GBK 是一种用于简体中文的字符编码方式&#xff0c;它不支持所有可能的 Unicode 字符。 解决方法 明确文件的正确编码&#xff1a;首…...

DeepSeek应用——与word的配套使用

目录 一、效果展示 二、配置方法 三、使用方法 四、注意事项 1、永久化使用 2、宏被禁用 3、office的生成失败 记录自己学习应用DeepSeek的过程...... 这个是与WPS配套使用的过程&#xff0c;office的与这个类似&#xff1a; 一、效果展示 二、配置方法 1、在最上方的…...

递归乘法算法

文章目录 递归乘法题目链接题目详解解题思路&#xff1a;代码实现&#xff1a; 结语 欢迎大家阅读我的博客&#xff0c;给生活加点impetus&#xff01;&#xff01; 让我们进入《题海探骊》&#xff0c;感受算法之美&#xff01;&#xff01; 递归乘法 题目链接 在线OJ 题目…...

【免费】2004-2020年各省废气中废气中二氧化硫排放量数据

2004-2020年各省废气中废气中二氧化硫排放量数据 1、时间&#xff1a;2004-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、废气中二氧化硫排放量(万吨) 4、范围&#xff1a;31省 5、指标说明&#xff1a;二氧化硫排放量指…...

CNN-LSSVM卷积神经网络最小二乘支持向量机多变量多步预测,光伏功率预测

代码地址&#xff1a;CNN-LSSVM卷积神经网络最小二乘支持向量机多变量多步预测&#xff0c;光伏功率预测 CNN-LSSVM卷积神经网络最小二乘支持向量机多变量多步预测&#xff0c;光伏功率预测 一、引言 1、研究背景和意义 光伏发电作为可再生能源的重要组成部分&#xff0c;近…...

【油猴脚本/Tampermonkey】DeepSeek 服务器繁忙无限重试(20250213优化)

目录 一、 引言 二、 逻辑 三、 源代码 四、 添加新脚本 五、 使用 六、 BUG 七、 优化日志 1.获取最后消息内容报错 一、 引言 deepseek每次第一次提问就正常&#xff0c;后面就开始繁忙了&#xff0c;有一点阴招全使我们身上。 greasyfork登不上&#xff0c;不知道…...

单调栈及相关题解

单调递增栈&#xff1a;栈中数据入栈单调递增序列(栈底到栈顶是单调递增)&#xff1b; 单调递减栈&#xff1a;栈中数据入栈单调递减序列(栈底到栈顶是单调递减)。 单调递增栈&#xff1a; 维护单调递增栈:遍历数组中每一个元素&#xff0c;执行入栈&#xff1a;每次入栈前先…...

每日温度问题:如何高效解决?

给定一个整数数组 temperatures&#xff0c;表示每天的温度&#xff0c;要求返回一个数组 answer&#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 问题分析 我们需要计算…...

#渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

统计安卓帧率和内存

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class AnalysisTool : MonoBehaviour { private void Awake() { DontDestroyOnLoad(gameObject); } public Text mmText; // 用于显示FPS的UI …...

大数据学习之PB级百战出行网约车二

21.订单监控_Redis工具类 package com . itbaizhan . utils ; import redis . clients . jedis . Jedis ; import redis . clients . jedis . JedisPool ; import redis . clients . jedis . JedisPoolConfig ; /** * 操作 redis 数据库 62 */ public class Redis…...

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…...

C++病毒(^_^|)(2)

第二期 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…...

在vscode中拉取gitee里的项目并运行

拉取项目: 方法一:vscode点击查看--->终端(或者直接通过快捷键ctrol+ `打开) 在终端内通过cd命令定位到你想存放项目的文件夹 例如:cd h: 通过命令:git clone 地址 例如:git clone newbee-mall-vue-app: 前端代码 等待拉取完成即可在对应文件夹下看到项目啦 方…...

centos7 防火墙开放指定端口

在 CentOS 7 中&#xff0c;默认的防火墙管理工具是 firewalld。如果你想开放一个特定的端口&#xff0c;以便允许外部访问&#xff0c;可以通过以下步骤实现&#xff1a; 安装 firewalld 如果你的系统上还没有安装 firewalld&#xff0c;你可以通过以下命令安装&#xff1a; …...

Day42(补)【AI思考】-编译过程中语法分析及递归子程序分析法的系统性解析

文章目录 编译过程中语法分析及递归子程序分析法的系统性解析**一、总览&#xff1a;编译流程中的语法分析****1. 编译过程核心步骤** **二、语法分析的核心任务****1. 核心目标****2. 现实类比** **三、递归子程序分析法的本质****1. 方法分类****2. 递归子程序分析法的运作原…...

AI成为基础设施有哪些研究方向:模型的性能、可解释性,算法偏见

AI成为基础设施有哪些研究方向 模型的性能、可解释性和降低训练成本 伦理问题:算法偏见、数据隐私保护、人工智能的权利和责任 数据使用问题:公开数据已经使用完了,未来使用隐私数据(专家) 当AI成为基础设施后,研究方向将更加多元化和深入,涵盖技术创新、应用拓展、…...

写一个鼠标拖尾特效

思路和逻辑 要实现鼠标拖尾特效&#xff0c;我们需要&#xff1a; 监听鼠标移动事件&#xff0c;获取鼠标的当前位置。在每次鼠标移动时&#xff0c;绘制一个小圆点或其他形状在鼠标的当前位置。将所有绘制的圆点连接起来&#xff0c;形成一条“尾巴”。使用动画效果让尾巴看…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...