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

滑窗问题实验LC2653(一次遍历维持窗口元素保持排序)

在只有一次遍历(即滑窗每向右移动一步只处理新增元素和删除旧元素)的前提下,要维持当前窗口内元素的全局“可排序”结构

问题背景:LeetCode 2653 - 滑动子数组的美丽值

题目要求在大小为 k 的滑动窗口中,找到第 x 小的整数。如果这个数是负数,则它就是该窗口的“美丽值”;否则,美丽值为 0。数组元素 nums[i] 的范围是 [-50, 50]

下面是针对您提供的每种 C++ 实现的分析:


1. 平衡二叉搜索树 (std::multiset) - beauty_multiset

  • 结构与原理
    std::multiset 是 C++ STL 中的关联容器,底层通常由红黑树实现。它自动维护元素的有序性,并允许存储重复元素。
  • 实现分析 (beauty_multiset):
    1. 初始化:空 multiset
    2. 添加新元素 (win.insert(nums[i])):O(log k)
    3. 删除旧元素 (win.erase(win.find(nums[i - k]))):win.find()O(log k)win.erase(iterator) 也是 O(log k)(摊销)。这里使用 find 是为了确保当有重复元素时,只删除一个匹配的实例。
    4. 查询第 x 小元素
      auto it = win.begin();
      advance(it, x - 1); // O(x) 操作
      int v = *it;
      
      win.begin() 得到指向最小元素的迭代器。std::advance(it, x - 1) 将迭代器向前移动 x-1 步,定位到第 x 小的元素。这个操作的复杂度是 O(x),在最坏情况下(x 接近 k)是 O(k)
  • 时间复杂度
    • 每个元素入窗和出窗各一次,每次 O(log k)
    • 每次窗口滑动后查询第 x 小,需要 O(x)
    • 总共 N 个元素,窗口滑动 N-k+1 次。
    • 总体复杂度:O(N * (log k + x))。由于 x <= k,可以认为是 O(N * (log k + k)),即 O(N * k)
    • 注:如果使用支持 Order-Statistic Tree (如 GNU PBDS tree),查询第 x 小可以是 O(log k),总复杂度可降至 O(N log k)
  • 空间复杂度O(k),存储窗口内元素。
  • 优点:代码简洁,逻辑清晰,直接利用了 multiset 的有序性。
  • 缺点:查询第 x 小元素时 std::advance 效率不高,导致整体复杂度偏高。

2. 双堆 + 延迟删除 - beauty_two_heaps

  • 结构与原理
    通常用一个最大堆 small(存较小的一半元素)和一个最小堆 large(存较大的一半元素)来动态维护中位数。为了找到第 x 小的元素,这个结构需要调整:
    • small (最大堆) 应该存储窗口中最小的 x 个元素。
    • large (最小堆) 应该存储窗口中剩下的 k-x 个较大的元素。
    • x 小的元素就是 small.top()
    • 延迟删除通过一个哈希表 delayed 记录待删除元素的计数,当这些元素出现在堆顶时才真正移除。
  • 实现分析 (beauty_two_heaps):
    • 平衡逻辑 (rebalance):
      if ((int)small.size() > (int)large.size() + 1) { /* ... */ }
      else if (small.size() < large.size()) { /* ... */ }
      
      这段平衡代码的目标是使 smalllarge 的大小尽量接近(small 最多比 large 大1),这是为中位数设计的。对于第 x 小元素,平衡逻辑应调整为:
      • 如果 small.size() > x,将 small.top() 移到 large
      • 如果 small.size() < xlarge 不空,将 large.top() 移到 small
    • 插入新元素 (v):
      先尝试放入 smalllarge,然后调用 rebalance
    • 删除滑出元素 (out):
      delayed 中标记,如果 out 可能影响堆顶,则调用 pruneSmall()pruneLarge() 清理,然后 rebalance
    • 查询第 x 小元素:
      int kth = small.top();
      
      这依赖于 small 堆正确维护了窗口中最小的 x 个元素,且其堆顶就是第 x 小的。以当前代码的 rebalance 逻辑,small.top() 并不总是第 x 小的元素,除非 x 恰好是 small 堆的目标大小(约 k/2
      例如,若 k=5, x=1,当前 rebalance 可能使 small 有3个元素,large 有2个,small.top() 并非第1小。
  • 时间复杂度 (假设修正为 x-th smallest 的平衡逻辑)
    • 插入、删除(含平衡、清理):摊销 O(log k)
    • 查询:O(1) (取 small.top()) + 可能的堆顶清理 O(log k)
    • 总体复杂度:O(N log k)
  • 空间复杂度O(k) (存储堆元素) + O(k) (最坏情况 delayed 哈希表大小)。
  • 优点:如果正确为第 x 小元素调整平衡逻辑,查询快。
  • 缺点:实现复杂,容易出错。当前代码的平衡逻辑是为中位数设计的,直接用于第 x 小元素会有问题,除非 x 约等于窗口大小的一半。需要修改 rebalance 和插入逻辑,确保 small 堆的大小严格维持在 x

3. 有序数组 + 二分插入/删除 - beauty_ordered_array

  • 结构与原理
    维护一个固定大小 kstd::vector,并始终保持其有序。
  • 实现分析 (beauty_ordered_array):
    1. 初始化:取前 k 个元素放入 window,然后排序 (O(k log k))。
    2. 查询第 x 小元素window[x-1]O(1)
    3. 滑动窗口
      • 删除 nums[i-k]lower_bound 找到位置 (O(log k)),window.erase(iterator) 移动元素 (O(k)).
      • 插入 nums[i]upper_bound 找到位置 (O(log k)),window.insert(iterator, value) 移动元素 (O(k)).
  • 时间复杂度
    • 初始化:O(k log k).
    • 每次滑动:删除 O(k) + 插入 O(k)
    • 总体复杂度:O(k log k + (N-k) * k) = O(N * k)
  • 空间复杂度O(k),存储窗口内元素。
  • 优点:实现相对简单,直接操作有序数组。对于 k 很小的情况,常数因子可能较低。
  • 缺点:插入和删除操作中的元素移动导致 O(k) 的耗时,窗口大时性能较差。

4. 计数排序 / 桶排序 - beauty_counting

  • 结构与原理
    利用题目中元素值域 [-50, 50] 非常小的特点。使用一个计数数组 cnt 记录窗口内每个值出现的次数。由于数组下标不能为负,需要一个 OFFSET
  • 实现分析 (beauty_counting):
    1. OFFSET = 50,值 v 映射到 cnt 数组下标 v + OFFSETcnt 数组大小为 101 (覆盖 -50 到 +50)。
    2. 添加新元素cnt[nums[i] + OFFSET]++O(1)
    3. 删除旧元素cnt[nums[i - k] + OFFSET]--O(1)
    4. 查询第 x 小元素:
      int csum = 0, beauty = 0;
      for (int idx = 0; idx <= 100; idx++) { // 遍历值域csum += cnt[idx];if (csum >= x) {int v = idx - OFFSET;beauty = v < 0 ? v : 0;break;}
      }
      
      从最小值 (-50) 开始遍历计数数组,累加元素出现次数 csum,直到 csum >= x。此时对应的 idx - OFFSET 就是第 x 小的元素。此操作复杂度为 O(ValueRange)
  • 时间复杂度
    • 添加/删除:O(1)
    • 查询:O(ValueRange)。在这里 ValueRange 是 101,是个常数。
    • 总体复杂度:O(N * ValueRange),对于此题是 O(N * 101) \approx O(N)
  • 空间复杂度O(ValueRange),存储计数数组。
  • 优点:利用了值域限制,实现了非常高效的更新和查询。对于此题是最佳方案。
  • 缺点:仅适用于值域较小或可以有效离散化的情况。

5. Treap (随机平衡二叉搜索树) - beauty_treap

  • 结构与原理
    Treap 是一种随机化的平衡二叉搜索树,通过为每个节点赋予一个随机优先级,并同时满足 BST 性质(按键值)和堆性质(按优先级)来维持平衡。期望操作复杂度为 O(log k)
  • 实现分析 (beauty_treap):
    • Treap 节点:包含 key(值)、pri(随机优先级)、sz(子树大小)、lr 指针。sz 对于快速查找第 x 小元素至关重要。
    • insert_treapdelete_treap:标准的 Treap 插入和删除操作,通过旋转维持平衡,期望 O(log k)
    • 查询第 x 小元素:
      vector<int> tmp;
      inorder(root, tmp); // O(k) 中序遍历得到有序序列
      int v = tmp[x - 1]; // O(1)
      
      当前实现通过中序遍历将整个 Treap 元素存入 vector,然后取第 x-1 个。这使得查询操作为 O(k)
    • 优化查询:利用节点中的 sz (子树大小) 属性,可以在 Treap 中直接查找第 x 小元素,时间复杂度为 O(log k)
      // 伪代码 (find_kth)
      Treap* find_kth(Treap* t, int rank) {if (!t) return nullptr;int left_size = size(t->l);if (rank == left_size + 1) return t;if (rank <= left_size) return find_kth(t->l, rank);return find_kth(t->r, rank - (left_size + 1));
      }
      // ... 调用时:
      // Treap* node = find_kth(root, x);
      // int v = node->key;
      
  • 时间复杂度 (当前实现)
    • 插入/删除:期望 O(log k)
    • 查询:O(k) (由于中序遍历)。
    • 总体复杂度:O(N * k)
  • 时间复杂度 (若查询优化为 O(log k))
    • 总体复杂度:期望 O(N log k)
  • 空间复杂度O(k),存储 Treap 节点。
  • 优点:一种通用的平衡树结构。如果实现 O(log k) 的第 x 小查询,性能很好。
  • 缺点:实现复杂,常数因子可能较大。当前查询实现未利用 Treap 的优势。

主接口 getSubarrayBeauty 与选型建议

vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {// 推荐:由于 nums[i] ∈ [-50,50],使用计数法最快return beauty_counting(nums, k, x);// ... 其他方法 ...
}
  • 对于 LeetCode 2653 这道题:

    • 最佳选择:beauty_counting (计数排序)。因为元素值域 [-50, 50] 非常小且固定,计数排序的 O(N * ValueRange) 复杂度在此题中接近 O(N),是最优的。
    • 次优选择 (通用情况)
      • beauty_multiset:如果使用支持 O(log k) 查第 x 小的平衡树 (如 PBDS tree),则为 O(N log k)。标准 multisetO(N * (log k + x))
      • beauty_two_heaps:如果正确实现针对第 x 小元素的平衡逻辑(确保 small 堆大小为 x),则为 O(N log k)
      • beauty_treap:如果实现 O(log k) 查第 x 小,则为 O(N log k)
    • 较慢选择
      • beauty_ordered_arrayO(N * k)k 较大时会超时。
  • 代码中的 beauty_two_heaps 的问题: 如前所述,它的平衡逻辑是为中位数设计的。若要正确用于第 x 小,rebalance 函数和可能的元素分配逻辑(插入时元素进 small 还是 large)需要调整,目标是始终让 small (最大堆) 包含窗口中最小的 x 个元素。

实验 lc2653

2653. 滑动子数组的美丽值
image.png

image.png

image.png
image.png

#include <bits/stdc++.h>using namespace std;class Solution {public:// ---------- 1. 平衡树 (multiset) ----------vector<int> beauty_multiset(vector<int>& nums, int k, int x) {multiset<int> win;vector<int> ans;for (int i = 0; i < (int)nums.size(); i++) {win.insert(nums[i]);if (i >= k)win.erase(win.find(nums[i - k]));if (i >= k - 1) {// 取第 x 小auto it = win.begin();advance(it, x - 1);int v = *it;ans.push_back(v < 0 ? v : 0);}}return ans;}// ---------- 2. 双堆 + 延迟删除 ----------vector<int> beauty_two_heaps(vector<int>& nums, int k, int x) {priority_queue<int> small;                            // max-heappriority_queue<int, vector<int>, greater<int>> large; // min-heapunordered_map<int, int> delayed;// 对 small 队列中被延迟删除的元素进行真正删除auto pruneSmall = [&]() {while (!small.empty()) {int v = small.top();if (delayed.count(v)) {if (--delayed[v] == 0)delayed.erase(v);small.pop();} elsebreak;}};// 对 large 队列中被延迟删除的元素进行真正删除auto pruneLarge = [&]() {while (!large.empty()) {int v = large.top();if (delayed.count(v)) {if (--delayed[v] == 0)delayed.erase(v);large.pop();} elsebreak;}};// 保持两个堆的大小平衡:|small| == |large| 或者 |small| == |large|+1auto rebalance = [&]() {if ((int)small.size() > (int)large.size() + 1) {large.push(small.top());small.pop();pruneSmall();} else if (small.size() < large.size()) {small.push(large.top());large.pop();pruneLarge();}};vector<int> ans;for (int i = 0; i < (int)nums.size(); i++) {int v = nums[i];if (small.empty() || v <= small.top())small.push(v);elselarge.push(v);rebalance();if (i >= k) {int out = nums[i - k];delayed[out]++;if (out <= small.top())pruneSmall();elsepruneLarge();rebalance();}if (i >= k - 1) {int kth =small.top(); // 此处 small.top() 就是窗口内第 x 小(若 x=1)ans.push_back(kth < 0 ? kth : 0);}}return ans;}// ---------- 3. 有序数组 + 二分插入/删除 ----------vector<int> beauty_ordered_array(vector<int>& nums, int k, int x) {vector<int> window(nums.begin(), nums.begin() + k), ans;sort(window.begin(), window.end());for (int i = k;; i++) {int v = window[x - 1];ans.push_back(v < 0 ? v : 0);if (i == (int)nums.size())break;// 删除 nums[i-k],插入 nums[i]auto it = lower_bound(window.begin(), window.end(), nums[i - k]);window.erase(it);window.insert(upper_bound(window.begin(), window.end(), nums[i]),nums[i]);}return ans;}// ---------- 4. 计数排序 / 桶排序 (值域 [-50,50]) ----------vector<int> beauty_counting(vector<int>& nums, int k, int x) {const int OFFSET = 50;vector<int> cnt(101, 0), ans;for (int i = 0; i < (int)nums.size(); i++) {cnt[nums[i] + OFFSET]++;if (i >= k)cnt[nums[i - k] + OFFSET]--;if (i >= k - 1) {int csum = 0, beauty = 0;for (int idx = 0; idx <= 100; idx++) {csum += cnt[idx];if (csum >= x) {int v = idx - OFFSET;beauty = v < 0 ? v : 0;break;}}ans.push_back(beauty);}}return ans;}// ---------- 5. Treap(随机平衡二叉搜索树) ----------struct Treap {int key, pri, sz;Treap *l, *r;Treap(int _k) : key(_k), pri(rand()), sz(1), l(nullptr), r(nullptr) {}};int size(Treap* t) { return t ? t->sz : 0; }void upd(Treap* t) {if (t)t->sz = 1 + size(t->l) + size(t->r);}Treap* rotate_right(Treap* y) {Treap* x = y->l;y->l = x->r;x->r = y;upd(y);upd(x);return x;}Treap* rotate_left(Treap* x) {Treap* y = x->r;x->r = y->l;y->l = x;upd(x);upd(y);return y;}Treap* insert_treap(Treap* t, int k) {if (!t)return new Treap(k);if (k < t->key) {t->l = insert_treap(t->l, k);if (t->l->pri < t->pri)t = rotate_right(t);} else {t->r = insert_treap(t->r, k);if (t->r->pri < t->pri)t = rotate_left(t);}upd(t);return t;}Treap* delete_treap(Treap* t, int k) {if (!t)return nullptr;if (t->key == k) {if (!t->l || !t->r) {Treap* c = t->l ? t->l : t->r;delete t;return c;}if (t->l->pri < t->r->pri) {t = rotate_right(t);t->r = delete_treap(t->r, k);} else {t = rotate_left(t);t->l = delete_treap(t->l, k);}} else if (k < t->key) {t->l = delete_treap(t->l, k);} else {t->r = delete_treap(t->r, k);}upd(t);return t;}void inorder(Treap* t, vector<int>& out) {if (!t)return;inorder(t->l, out);out.push_back(t->key);inorder(t->r, out);}vector<int> beauty_treap(vector<int>& nums, int k, int x) {Treap* root = nullptr;vector<int> ans;for (int i = 0; i < (int)nums.size(); i++) {root = insert_treap(root, nums[i]);if (i >= k)root = delete_treap(root, nums[i - k]);if (i >= k - 1) {vector<int> tmp;inorder(root, tmp);int v = tmp[x - 1];ans.push_back(v < 0 ? v : 0);}}return ans;}// 主接口,调用你想用的任意一种:vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {// 推荐:由于 nums[i] ∈ [-50,50],使用计数法最快return beauty_counting(nums, k, x);// 其他几种可切换为:// return beauty_multiset(nums, k, x);// return beauty_two_heaps(nums, k, x);// return beauty_ordered_array(nums, k, x);// return beauty_treap(nums, k, x);}};

image.png
image.png

相关文章:

滑窗问题实验LC2653(一次遍历维持窗口元素保持排序)

在只有一次遍历&#xff08;即滑窗每向右移动一步只处理新增元素和删除旧元素&#xff09;的前提下&#xff0c;要维持当前窗口内元素的全局“可排序”结构 问题背景&#xff1a;LeetCode 2653 - 滑动子数组的美丽值 题目要求在大小为 k 的滑动窗口中&#xff0c;找到第 x 小…...

PHP学习笔记(八)

返回值 值通过可选参数的返回语句返回 return的使用 函数不能返回多个值&#xff0c;但可以通过返回一个数组来得到类似的效果 函数返回一个引用&#xff0c;必须在函数声明和指派返回值给一个变量时都使用引用运算符&&#xff1a; 可变函数 PHP支持可变函数的概念。意味…...

【react18】在styled-components中引入图片报错

在styled-components项目中&#xff0c;遇到背景图片显示不出来的问题。图片的确是引入正确&#xff0c;但是webpack解析路径是有问题的 效果展示 以下这两种写法都不行&#xff0c;无法生效 export const HeaderNavLeft styled.h1width: 176px;height: 69px;background: ur…...

693SJBH基于.NET的题库管理系统

计算机与信息学院 本科毕业论文&#xff08;设计&#xff09;开题报告 论文中文题目 基于asp.net的题库管理系统设计与实现 论文英文题目 Asp.net based database management system design and Implementation 学生姓名 专业班级 XXXXXX专业08 班 ⒈选题的背景和意…...

centos系统redis-dump安装

1. ​Ruby 环境​ Redis-dump 是一个 Ruby 工具&#xff0c;需先安装 Ruby 和 RubyGems。 安装依赖​&#xff1a; sudo yum install -y curl gpg2 gcc-c patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf aut…...

如何利用 Conda 安装 Pytorch 教程 ?

如何利用 Conda 安装 Pytorch 教程 &#xff1f; 总共分为六步走&#xff1a; &#xff08;1&#xff09;第一步&#xff1a;验证conda 环境是否安装好&#xff1f; 1) conda -V2) conda --version&#xff08;2&#xff09;第二步&#xff1a;查看现有环境 conda env list…...

FPGA降低功耗研究

FPGA降低功耗研究 首先要明白一点&#xff1a;我们的核心目标是在维持性能的前提下&#xff0c;通过工艺、架构、设计方法学和系统级策略的协同优化&#xff0c;降低动态功耗、静态功耗和短路功耗。 本篇文章则是聚焦于 FPGA 设计阶段 的功耗优化&#xff0c;主要从 RTL 代码设…...

软考 系统架构设计师系列知识点之杂项集萃(67)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;66&#xff09; 第108题 RISC&#xff08;精简指令系统计算机&#xff09;的特点不包括&#xff08;&#xff09;。 A. 指令长度固定&#xff0c;指令种类尽量少 B. 寻址方式尽量丰富&#xff…...

第十节第三部分:常见API:传统时间:Date日期类、SimpleDateFormat

Date日期类常用方法 时间格式常用符号 Date日期类总结 为什么用SimpleDateFormat SimpleDateFormat常见方法 SimpleDateFormat解析字符串时间成为日期对象 SimpleDateFormat总结 代码&#xff1a; 代码一&#xff1a;Date日期类 package com.itheima.Time;import java.util.D…...

Python学习Day1:安装

Python的安装 1.安装python 打开python的官网&#xff0c;我们下载3.6.8版本Python Release Python 3.6.8 | Python.org 根据自己的电脑来下载对应的python版本 如图所示&#xff1a; 我已经下载完成&#xff0c;就是这样&#xff0c; 安装页面的第一排是自动安装&#xf…...

Java安全-Servlet内存马

内存马简介 内存马是指将恶意代码注入到内存中&#xff0c;达到无文件落地的效果&#xff0c;使得被攻击方难以察觉。由于是无文件的形式&#xff0c;可以绕过部分基于文件检测的杀软。而 Servlet 内存马是基于 Java Servlet 技术&#xff0c;动态将恶意代码注入到 Tomcat 内存…...

Mariadb cpu 93% 问题

最近项目遇到cpu平均使用率93% 一、登录数据库服务查看具体情况 可以看到服务器负载很高&#xff0c;&#xff0c;mariadb CPU使用已达到接近380.4% &#xff08;因为是8核&#xff0c;所以会有超过100%的情况&#xff09;。如下图&#xff1a; 二、排查是否有耗时较长sql 在…...

LeetCode222_完全二叉树的结点个数

LeetCode222_完全二叉树的结点个数 标签&#xff1a;#位运算 #树 #二分查找 #二叉树Ⅰ. 题目Ⅱ. 示例 0. 个人方法 标签&#xff1a;#位运算 #树 #二分查找 #二叉树 Ⅰ. 题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&…...

linux 查看java的安装路径

一、验证Java安装状态 java -version正常安装会显示版本信息&#xff1a; openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)二、检查环境变量配置 若已配置JAVA_HOME&#…...

day32 python解释性库PDPbox

目录 一、初识PDPbox官方文档 二、准备鸢尾花数据集和训练模型 三、使用PDPbox进行解释性分析 1. 导入类并实例化对象 2. 调用plot方法绘制图形 3. 探索返回值的意义 四、总结与感悟 作为一名正在学习机器学习的学生&#xff0c;今天要学习一个非常有趣的库——PDPbox&am…...

LVLM-AFAH论文精读

Basic Information 标题&#xff1a;Your Large Vision-Language Model Only Needs A Few Attention Heads For Visual Grounding作者&#xff1a;Seil Kang&#xff0c; Jinyeong Kim&#xff0c; Junhyeok Kim&#xff0c; Seong Jae Hwang机构&#xff1a;Yonsei Universit…...

蓝桥杯3503 更小的数

问题描述 小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串&#xff0c;下标从 0 到 n−1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。 小蓝想要将选出的子…...

5.21本日总结

一、英语 复习list4list26 二、数学 学完14讲&#xff0c;1000题13讲写完 三、408 学习计网5.3剩余内容 四、总结 高数本月结束知识点学习&#xff0c;15讲知识点与14讲的题目同步进行。408剩余两本书要加快学习进度。 五、明日计划 英语&#xff1a;复习lsit5list25 …...

【25软考网工】第七章(3) UOS Linux防火墙配置和Web应用服务配置

博客主页&#xff1a;christine-rr-CSDN博客 ​​​专栏主页&#xff1a;软考中级网络工程师笔记 ​​​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&am…...

Python数据分析基础

Python数据分析入门 介绍 在这个教程中&#xff0c;我们将学习如何使用Python来进行基本的数据分析。 安装必要的库 为了开始&#xff0c;你需要安装以下Python库&#xff1a; NumPyPandasMatplotlib 示例代码 import numpy as np import pandas as pd import matplotli…...

spring cloud config更新配置

在开发微服务时&#xff0c;往往需要有开发环境、测试环境和生产环境&#xff0c;手动修改配置环境是一件很麻烦的事情&#xff0c;因此&#xff0c;这里使用spring cloud config管理配置环境。要使用spring cloud config&#xff0c;需要先在GitHub搭建一个仓库。 一、仓库搭…...

小米汽车二期工厂下月将竣工,产能提升助力市场拓展

在新能源汽车市场竞争日益激烈的当下&#xff0c;小米汽车传来重要进展消息。据多方信息显示&#xff0c;小米汽车二期工厂下月即将竣工&#xff0c;这一关键节点的到来&#xff0c;有望为小米汽车的产能提升与市场布局带来重大突破。​ 小米汽车二期工厂位于北京亦庄&#xff…...

【单片机】如何产生负电压?

以下是对知乎文章《单片机中常用的负电压是这样产生的&#xff01;》的解析与总结&#xff0c;结合电路原理、应用场景及讨论要点展开&#xff1a; 一、负电压产生的核心原理 负电压本质是相对于参考地&#xff08;GND&#xff09;的电势差为负值&#xff0c;需通过电源或储能…...

Mcu_Bsdiff_Upgrade

系统架构 概述 MCU BSDiff 升级系统通过使用二进制差分技术&#xff0c;提供了一种在资源受限的微控制器上进行高效固件更新的机制。系统不传输和存储完整的固件映像&#xff0c;而是只处理固件版本之间的差异&#xff0c;从而显著缩小更新包并降低带宽要求。 该架构遵循一个…...

阿里云ecs 8核 16G 内存 装有redis6 分配了3G内存,和2个tomcat 每个tomcat 4G 服务器反应迟钝,如何确认不是redis的问题

我们经常用redis 但遇到tomcat timeout的时候&#xff0c;如何确认不是redis的问题。 不能因为这个再去搞个redis 压力测试。有没有更省劲的方法来确认不是redis的问题 以下是针对 阿里云 ECS&#xff08;8核16G&#xff0c;Redis 6分配3G内存&#xff0c;2个Tomcat各分配4G&a…...

机器学习-KNN算法

1.机器学习概述&#xff08;全部流程&#xff09; 获取数据&#xff1a;from sklearn.datasets import load_wine 数据处理(数据集划分、标准化):from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler 特征工程:from s…...

【数据结构 · 初阶】- 快速排序

目录 一. Hoare 版本 1. 单趟 2. 整体 3. 时间复杂度 4. 优化&#xff08;抢救一下&#xff09; 4.1 随机选 key 4.2 三数取中 二. 挖坑法 格式优化 三. 前后指针&#xff08;最好&#xff09; 四. 小区间优化 五. 改非递归 快速排序是 Hoare 提出的一种基于二叉树…...

HTTPS和HTTP区别

客户端向服务器发送HTTPS请求。服务器响应并发送其数字证书。客户端通过证书的公钥验证数字签名的有效性&#xff0c;如果有效&#xff0c;客户端生成一个随机的对称密钥。客户端使用公钥对这个对称密钥进行加密&#xff0c;然后将加密后的密钥发送给服务器。服务器使用自己的私…...

自动驾驶中的预测控制算法:用 Python 让无人车更智能

自动驾驶中的预测控制算法:用 Python 让无人车更智能 自动驾驶技术近年来取得了令人惊叹的进步,AI 与边缘计算的结合让车辆能够实时感知环境、规划路径并执行驾驶决策。其中,预测控制(Model Predictive Control,MPC) 作为一种先进的控制算法,凭借其对未来驾驶行为的优化…...

分享一些实用的网址

第一个&#xff1a;视频转化为动图 网址&#xff1a;https://www.freeconvert.com/zh/convert/mp4-to-gif 当然还有很多其他的功能&#xff0c;可以按需选择使用。 第二个&#xff1a;ASCII字符串到16进制在线转换工具 网址 &#xff1a;https://coding.tools/cn/ascii-to-…...

打开小程序提示请求失败(小程序页面空白)

1、小程序代码是商城后台下载的还是自己编译的 &#xff08;1&#xff09;要是商城后台下载的&#xff0c;检查设置里面的域名是不是https的 &#xff08;2&#xff09;要是自己编译的&#xff0c;检查app.js里面的接口域名是不是https的&#xff0c;填了以后有没有保存 注&a…...

Taro 安全区域

目录 一、问题描述 二、问题解决 1、顶部刘海区 2、底部小黑条 一、问题描述 安全区域主要是为了避免刘海屏或底部栏遮挡&#xff0c;而造成的不良显示效果。 本次将针对以下两点进行考量&#xff1a; 1、顶部刘海屏区 2、苹果X底部小黑条 二、问题解决 通过Taro.getS…...

DL00988-稀疏增强数据transformer船舶AIS轨迹预测含完整数据集

提升科研效率&#xff0c;精准预测船舶AIS轨迹&#xff01;文末有完整获取方式 作为研究生和科研人员&#xff0c;是否在进行船舶轨迹预测时遇到数据稀疏、轨迹复杂等问题&#xff1f;现在&#xff0c;我们为你提供一款基于稀疏增强数据Transformer的船舶AIS轨迹预测工具&#…...

重写B站(网页、后端、小程序)

1. 网页端 1.1 框架 Vue ElementUI axios 1.2 框架搭建步骤 搭建Vue 1.3 配置文件 main.js import {createApp} from vue import ElementUi from element-plus import element-plus/dist/index.css; import axios from "axios"; import router from…...

SOPHGO算能科技BM1688内存使用与编解码开发指南

1. BM1688内存分配接口详解 1.1 设备内存分配接口区别 BM1688提供了三个主要的设备内存分配接口,它们的主要区别如下: // 基本设备内存分配接口 void* bm_malloc_device_byte(bm_handle_t handle, unsigned int size);// 指定heap区域的设备内存分配 void*</...

如何使用Antv X6使用拖拽布局?

拖拽效果图 拖拽后 布局预览 官方&#xff1a; X6 图编辑引擎 | AntV 安装依赖 # npm npm install antv/x6 --save npm install antv/x6-plugin-dnd --save npm install antv/x6-plugin-export --save需要引入的代码 import { Graph, Shape } from antv/x6; import { Dnd } …...

STM32项目分享:智能家居(机智云)升级版

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; STM32智能家居(机智云)升级版 &#xff08;资料…...

Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射

前置阅读&#xff0c;关于Flask-SQLAlchemy支持哪些数据库及基本配置&#xff0c;链接&#xff1a;Flask-SQLAlchemy_数据库配置 摘要 本文以一段典型的 SQLAlchemy 代码示例为引入&#xff0c;阐述以下核心概念&#xff1a; 模型类&#xff08;Model Class&#xff09; ↔ 数…...

算法优选系列(9.BFS 解决拓扑排序)

目录 拓扑排序简介&#xff1a; ​编辑 课程表&#xff08;medium&#xff09;&#xff1a; 课程表II&#xff08;medium&#xff09;: 火星词典&#xff08;hard&#xff09;&#xff1a; 拓扑排序简介&#xff1a; 有向无环图&#xff08;DAG图&#xff09; 如上图每条边…...

DevExpress Blazor中文教程 - 如何用AI聊天组件构建大型语言模型聊天APP?

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 AI服务提供各种量身定制的模型来满…...

PHP:经典编程语言在当代Web开发中的新活力

在当今的Web开发领域&#xff0c;新技术和新语言层出不穷&#xff0c;但PHP&#xff08;超文本预处理器&#xff09;作为一门经典且功能强大的编程语言&#xff0c;依然在Web开发中占据着重要地位&#xff0c;并不断展现出新的活力。 PHP的历史与现状 PHP诞生于1994年&#x…...

ToDesk云电脑、并行智算云与顺网云AI支持能力深度实测报告

随着AI技术的迅猛发展&#xff0c;云计算平台已成为突破本地硬件限制、实现高效AI计算的关键基础设施。本报告对ToDesk云电脑、并行智算云和顺网云三大主流云平台进行了全面测评&#xff0c;从硬件配置、AI软件兼容性、性能表现、用户体验及成本效益等维度深入分析其AI支持能力…...

javaweb的拦截功能,自动跳转登录页面

我们开发系统时候&#xff0c;肯定希望用户登录后才能进入主页面去访问其他服务&#xff0c;但要是没有拦截功能的话&#xff0c;他就可以直接通过url访问或者post注入攻击了。 因此我们可以通过在后端添加拦截过滤功能把没登录的用户给拦截下来&#xff0c;让他去先登录&#…...

精益数据分析(75/126):用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论

精益数据分析&#xff08;75/126&#xff09;&#xff1a;用户反馈的科学解读与试验驱动迭代——Rally的双向验证方法论 在创业的黏性阶段&#xff0c;用户反馈是优化产品的重要依据&#xff0c;但如何避免被表面反馈误导&#xff1f;如何将反馈转化为可落地的迭代策略&#x…...

轻量级高性能Rust HTTP服务器库Hyperlane,助力现代网络服务开发

轻量级高性能Rust HTTP服务器库Hyperlane&#xff0c;助力现代网络服务开发 Hyperlane是一款专为简化网络服务开发而设计的轻量级、高性能Rust HTTP服务器库。它凭借纯Rust和标准库构建&#xff0c;实现了Windows、Linux和macOS全平台兼容&#xff0c;依托Tokio异步运行时&…...

PCB设计实践(二十四)PCB设计时如何避免EMI

PCB设计中避免电磁干扰&#xff08;EMI&#xff09;是一项涉及电路架构、布局布线、材料选择及制造工艺的系统工程。本文从设计原理到工程实践&#xff0c;系统阐述EMI产生机制及综合抑制策略&#xff0c;覆盖高频信号控制、接地优化、屏蔽技术等核心维度&#xff0c;为高密度、…...

VRRP 协议

一、前言 最近被问到一个VRRP的网络协议&#xff0c;一开始我是蒙蔽的状态&#xff0c;至于什么是VRRP&#xff0c;我后面查了一下&#xff0c;因为对于网络这方面我也不是很精通&#xff0c;见谅&#xff01; VRRP&#xff0c;全称叫虚拟路由冗余协议&#xff0c;是我孤陋寡闻…...

年度工作计划总结述职报告PPT模版一组分享

工作计划总结述职报告PPT模版&#xff1a;工作计划述职报告PPT模版https://pan.quark.cn/s/fba40a5e87da 第一套PPT模版是医院年度工作计划的封面页&#xff0c;有蓝橙配色、医院标题、年度工作计划的大字、英文副标题、汇报人信息和右上角的医院logo区域&#xff0c;右侧还有医…...

【容易坑】mybatis中使用if标签比较两个字符串是否相等

资料都来自于网络&#xff0c;这里只是记录一下&#xff0c;仅供参考 现象 上传参数确实为3&#xff0c;但是到了sql中还是2&#xff0c;很纳闷&#xff0c;确定不是上送参数的问题 问题解决 问题的关键点就在于为啥偏偏是2身上&#xff0c;仔细看一下sql语句&#xff0c;这个…...

AI与产品架构设计(7):实时数据驱动下的AI架构设计:从流数据到智能决策

实时数据驱动下的AI架构设计&#xff1a;从流数据到智能决策 一、引言&#xff1a;从静态智能到流式智能的革命性跨越 在AI演进的历程中&#xff0c;我们正经历着从"数据仓库时代"向"数据流时代"的范式迁移。传统AI系统依赖的离线批处理模式&#xff0c;…...