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

华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

在这里插入图片描述

2025 A卷 100分 题型

本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!

2025华为OD真题目录+全流程解析/备考攻略/经验分享

华为OD机试真题《最小的调整次数/特异性双端队列》:


目录

    • 题目名称:最小的调整次数/特异性双端队列
      • 题目描述
    • Java
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • python
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • JavaScript
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C++
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • C语言
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • GO
      • 问题分析
      • 解题思路
      • 代码实现
      • 代码详细解析
      • 示例测试
      • 综合分析
    • 更多内容:


题目名称:最小的调整次数/特异性双端队列


属性内容
知识点双端队列、逻辑处理
时间限制1秒
空间限制256MB
限定语言不限

题目描述

有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但只能从头部移出数据。小A依次执行2n个指令(n个添加操作和n个移除操作)。添加指令按顺序插入1到n的数值(可能从头部或尾部添加),移除指令要求按1到n的顺序移出元素。在任何时刻可以调整队列数据顺序,求最少的调整次数以满足移除顺序要求。

输入描述

  • 第一行输入整数n(1 ≤ n ≤ 3×10⁵)。
  • 后续2n行包含n条添加指令(head add xtail add x)和n条remove指令。

输出描述
输出一个整数,表示最小调整次数。

示例
输入:

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出:

1  

解释:
移除顺序需为1→2→3→4→5。在第7步移除时队列头部为2,需调整顺序后移出,调整次数+1。


Java

问题分析

我们需要处理一个特异性的双端队列,每次添加元素可以选择头部或尾部,但只能从头部移除元素。目标是按顺序移除元素1到n,并在必要时调整队列顺序,求出最小的调整次数。

解题思路

  1. 维护连续区间:跟踪当前连续的右边界 currentMax,表示当前连续递增序列的最大值。
  2. 添加操作处理:如果添加的元素是 currentMax + 1 且添加到尾部,扩展连续区间;否则标记队列为无序。
  3. 移除操作处理:若队列头部是当前期望值 expected,直接移除;否则调整队列,调整次数加一,并重置连续区间。

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();int expected = 1;int currentMax = 0;int adjusts = 0;boolean ordered = true;for (int i = 0; i < 2 * n; i++) {String line = sc.nextLine().trim();if (line.startsWith("remove")) {if (ordered && expected == currentMax) {expected++;currentMax = 0;} else {adjusts++;expected++;currentMax = 0;ordered = true;}} else {int x = Integer.parseInt(line.split(" ")[2]);if (ordered) {if (x == currentMax + 1) {currentMax = x;} else {ordered = false;currentMax = Math.max(currentMax, x);}} else {currentMax = Math.max(currentMax, x);}}}System.out.println(adjusts);}
}

代码详细解析

  1. 输入处理:读取n和后续的2n条指令。
  2. 变量初始化
    • expected:下一个需要移除的元素,初始为1。
    • currentMax:当前连续区间的最大值,初始为0。
    • adjusts:调整次数计数器。
    • ordered:标记队列是否处于有序状态。
  3. 处理每条指令
    • 移除指令
      • 若队列有序且当前expected等于currentMax(即头部为expected),则直接移除。
      • 否则调整次数加一,重置currentMax并标记队列为有序。
    • 添加指令
      • 若队列有序且新元素是currentMax + 1,扩展连续区间。
      • 否则标记队列为无序,并更新currentMax

示例测试

示例输入

5
head add 1
tail add 2
remove
head add 3
tail add 4
head add 5
remove
remove
remove
remove

输出

1

解析:在第3步移除时队列头部不是1,调整次数加一。后续移除操作无需调整。

另一个测试用例

3
head add 3
tail add 1
remove
tail add 2
remove
remove

输出

2

解析:第一次移除时队列头部是3≠1,调整一次;第二次移除时头部是1≠2,调整第二次。

综合分析

  1. 时间复杂度:O(n),每个指令处理时间为O(1)。
  2. 空间复杂度:O(1),仅维护几个变量。
  3. 优势:无需模拟队列操作,直接通过逻辑判断调整次数,高效处理大规模数据。
  4. 适用性:适用于任何n值,尤其适合高并发和大数据场景。

python

问题分析

我们需要处理一个特异性的双端队列,队列可以从头部或尾部添加元素,但只能从头部移除元素。目标是按顺序移除1到n的元素,并在必要时调整队列顺序,求出最小的调整次数。

解题思路

  1. 维护连续区间:跟踪当前连续的右边界 current_max,表示当前可连续移除的最大值。
  2. 全局最大值:维护 global_max 记录所有已添加元素的最大值。
  3. 调整条件:当需要移除的元素 expected 超过 current_max 时,必须调整队列,调整次数加一,并将 current_max 更新为 global_max

代码实现

n = int(input())
expected = 1
current_max = 0
global_max = 0
adjusts = 0for _ in range(2 * n):line = input().strip()if line.startswith('remove'):if expected > current_max:adjusts += 1current_max = global_maxexpected += 1else:x = int(line.split()[2])global_max = max(global_max, x)if x == current_max + 1:current_max = xprint(adjusts)

代码详细解析

  1. 输入处理:读取 n 和后续的2n条指令。
  2. 初始化变量
    • expected:下一个需要移除的元素,初始为1。
    • current_max:当前连续区间的最大值,初始为0。
    • global_max:所有已添加元素的最大值,初始为0。
    • adjusts:调整次数计数器。
  3. 处理指令
    • 移除指令:若 expected 超过 current_max,调整次数加一,current_max 设为 global_max,随后 expected 递增。
    • 添加指令:更新 global_max,若元素是 current_max + 1,扩展连续区间。
  4. 输出结果:打印总调整次数。

示例测试

示例输入

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出

1

解析

  • 前三次操作后,current_max=2expected=2
  • 添加3、4、5后,current_max 保持2,global_max=5
  • 第四次移除时,expected=3 > current_max=2,调整次数加一,current_max 设为5,后续移除无需调整。

另一个测试用例

3  
head add 3  
tail add 1  
remove  
tail add 2  
remove  
remove  

输出

2

解析

  • 首次移除时,expected=1 > current_max=0,调整一次。
  • 第二次移除时,expected=2 > current_max=3(调整后 current_max=3),调整第二次。

综合分析

  1. 时间复杂度:O(n),每个指令处理时间为O(1)。
  2. 空间复杂度:O(1),仅维护几个变量。
  3. 优势:无需模拟队列操作,通过维护连续区间和全局最大值高效判断调整条件。
  4. 适用场景:适用于大规模数据,时间复杂度为线性,满足题目约束。

JavaScript

问题分析

我们需要处理一个特异性的双端队列,队列可以从头部或尾部添加元素,但只能从头部移除元素。目标是在执行一系列添加和移除操作后,统计最小的调整次数,使得移除顺序为1到n。


解题思路

  1. 维护连续区间:跟踪当前连续的右边界 currentMax,表示当前可以连续移除的最大值。
  2. 全局最大值:维护 globalMax 记录所有已添加元素的最大值。
  3. 调整条件:当需要移除的元素 expected 超过 currentMax 时,必须调整队列,调整次数加一,并将 currentMax 更新为 globalMax

代码实现

const readline = require('readline');const rl = readline.createInterface({input: process.stdin,output: process.stdout,terminal: false
});let n;
let expected = 1;
let currentMax = 0;
let globalMax = 0;
let adjusts = 0;
let lineCount = 0;rl.on('line', (line) => {if (lineCount === 0) {n = parseInt(line.trim());} else {const trimmedLine = line.trim();if (trimmedLine.startsWith('remove')) {if (expected > currentMax) {adjusts++;currentMax = globalMax;}expected++;} else {const x = parseInt(trimmedLine.split(' ')[2], 10);globalMax = Math.max(globalMax, x);if (x === currentMax + 1) {currentMax = x;}}}lineCount++;if (lineCount === 2 * n + 1) {console.log(adjusts);rl.close();}
});

代码详细解析

  1. 输入处理:使用 readline 逐行读取输入,第一行为 n
  2. 变量初始化
    • expected:下一个需要移除的元素,初始为1。
    • currentMax:当前可连续移除的最大值,初始为0。
    • globalMax:所有已添加元素的最大值,初始为0。
    • adjusts:调整次数计数器。
  3. 处理指令
    • 移除指令:若 expected > currentMax,调整次数加一,currentMax 设为 globalMax
    • 添加指令:更新 globalMax,若元素是 currentMax + 1,扩展 currentMax
  4. 输出结果:在所有指令处理完毕后输出调整次数。

示例测试

示例输入

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出

1

解析

  • 前三次操作后,currentMax=2expected=2
  • 添加3、4、5后,currentMax=5
  • 第四次移除时,expected=2 不超过 currentMax,无需调整。
  • 最后一次移除时,expected=5 超过 currentMax,调整次数加一。

另一个测试用例

3  
head add 3  
tail add 1  
remove  
tail add 2  
remove  
remove  

输出

2

解析

  • 首次移除时,expected=1 > currentMax=0,调整一次。
  • 第二次移除时,expected=2 > currentMax=3,调整第二次。

综合分析

  1. 时间复杂度:O(n),每个指令处理时间为O(1)。
  2. 空间复杂度:O(1),仅维护几个变量。
  3. 优势:无需模拟队列操作,通过维护连续区间和全局最大值高效判断调整条件。
  4. 适用场景:适用于大规模数据,时间复杂度为线性,满足题目约束。

C++

问题分析

我们需要处理一个特异性的双端队列,队列只能从头部或尾部添加元素,但移除只能从头部。目标是按顺序移除1到n的元素,计算最小调整次数。调整指的是重新排列队列,使头部元素为当前期望值。

解题思路

  1. 维护连续区间:跟踪当前可以连续移除的最大值 current_max,所有已添加元素的最大值 global_max
  2. 添加操作:若添加元素等于 current_max + 1,则扩展连续区间;否则更新 global_max
  3. 移除操作:若期望值超过 current_max,则调整队列,将 current_max 设为 global_max,调整次数加一。

代码实现

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;int main() {int n;cin >> n;cin.ignore(); // 忽略换行符int expected = 1; // 期望移除的下一个元素int current_max = 0; // 当前连续区间的最大值int global_max = 0; // 所有已添加元素的最大值int adjusts = 0; // 调整次数string line;for (int i = 0; i < 2 * n; ++i) {getline(cin, line);if (line.substr(0, 6) == "remove") {// 移除操作if (expected > current_max) {adjusts++;current_max = global_max;}expected++;} else {// 解析添加的值istringstream iss(line);string part, op;int x;iss >> part >> op >> x;// 更新全局最大值global_max = max(global_max, x);// 若元素是当前连续区间的下一个值,扩展区间if (x == current_max + 1) {current_max = x;}}}cout << adjusts << endl;return 0;
}

代码详细解析

  1. 输入处理:读取n并忽略换行符。
  2. 初始化变量
    • expected:下一个期望移除的元素,初始为1。
    • current_max:当前连续区间的最大值,初始为0。
    • global_max:所有已添加元素的最大值,初始为0。
    • adjusts:调整次数计数器。
  3. 处理每条指令
    • 移除指令:若期望值超过 current_max,调整次数加一,current_max 更新为 global_max
    • 添加指令:更新 global_max,若元素是 current_max + 1,则扩展连续区间。
  4. 输出结果:最终打印调整次数。

示例测试

示例输入

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出

1

解析

  • 添加1和2后,current_max=2
  • 第一次移除后,expected=2
  • 添加3、4、5后,current_max=5
  • 后续移除无需调整,仅在第4步移除时调整一次。

另一个测试用例

3  
head add 3  
tail add 1  
remove  
tail add 2  
remove  
remove  

输出

2

解析

  • 首次移除3时需调整(期望1)。
  • 移除1后,期望2超过 current_max=1,再次调整。

综合分析

  1. 时间复杂度:O(n),每个指令处理时间为O(1)。
  2. 空间复杂度:O(1),仅维护几个变量。
  3. 优势:无需模拟队列操作,通过维护连续区间和全局最大值高效判断调整条件。
  4. 适用性:适用于大规模数据,时间复杂度为线性,满足题目约束。

C语言

问题分析

我们需要处理一个特异性的双端队列,队列只能从头部或尾部添加元素,但移除只能从头部。目标是按顺序移除1到n的元素,计算最小调整次数。调整指的是重新排列队列,使头部元素为当前期望值。

解题思路

  1. 维护连续区间:跟踪当前可以连续移除的最大值 current_max,所有已添加元素的最大值 global_max
  2. 添加操作:若添加元素等于 current_max + 1,则扩展连续区间;否则更新 global_max
  3. 移除操作:若期望值超过 current_max,则调整队列,将 current_max 设为 global_max,调整次数加一。

代码实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define MAX_LINE_LENGTH 20 // 每行指令最大长度int main() {int n;scanf("%d", &n);getchar(); // 读取换行符int expected = 1;   // 期望移除的下一个元素int current_max = 0; // 当前连续区间的最大值int global_max = 0;  // 所有已添加元素的最大值int adjusts = 0;     // 调整次数计数器char line[MAX_LINE_LENGTH];for (int i = 0; i < 2 * n; i++) {fgets(line, MAX_LINE_LENGTH, stdin);line[strcspn(line, "\n")] = '\0'; // 去除换行符if (strcmp(line, "remove") == 0) { // 移除指令if (expected > current_max) {  // 需要调整adjusts++;current_max = global_max;}expected++;} else { // 添加指令(head add x 或 tail add x)int x;sscanf(line + 8, "%d", &x); // 跳过"head add "或"tail add "// 更新全局最大值if (x > global_max) global_max = x;// 检查是否扩展连续区间if (x == current_max + 1) {current_max = x;}}}printf("%d\n", adjusts);return 0;
}

代码详细解析

  1. 输入读取

    scanf("%d", &n);
    getchar(); // 处理输入n后的换行符
    
    • 读取n后,必须用getchar()清除输入缓冲区中的换行符,避免影响后续fgets读取。
  2. 变量初始化

    int expected = 1;     // 下一个期望移除的元素(初始为1)
    int current_max = 0;  // 当前连续区间的最大值(初始为0)
    int global_max = 0;   // 全局最大值(初始为0)
    int adjusts = 0;      // 调整次数计数器
    
  3. 处理每条指令

    fgets(line, MAX_LINE_LENGTH, stdin);
    line[strcspn(line, "\n")] = '\0'; // 去除末尾换行符
    
    • fgets读取整行指令,包括换行符,通过strcspn找到换行符位置并替换为终止符。
  4. 移除指令处理

    if (strcmp(line, "remove") == 0) {if (expected > current_max) { // 需要调整adjusts++;current_max = global_max;}expected++;
    }
    
    • 当期望值expected超过current_max时,必须调整队列,更新current_maxglobal_max,并增加调整次数。
  5. 添加指令处理

    sscanf(line + 8, "%d", &x); // 跳过指令前缀(head add 或 tail add)
    if (x > global_max) global_max = x;
    if (x == current_max + 1) {current_max = x;
    }
    
    • 从指令字符串的第8个字符开始解析数值(跳过head add tail add 共8字符)。
    • 更新全局最大值global_max
    • 若元素是current_max + 1,则扩展连续区间。

示例测试

示例输入

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出

1

解析

  1. 添加1和2后,current_max=2
  2. 第一次remove时,expected=1 <= current_max=2,无需调整。
  3. 添加3、4、5后,current_max保持2(因为3不是连续的)。
  4. 后续remove操作中,当expected=3 > current_max=2,触发调整,adjusts=1current_max=5
  5. 后续操作无需调整,最终总调整次数为1。

另一个测试用例

3  
head add 3  
tail add 1  
remove  
tail add 2  
remove  
remove  

输出

2

解析

  1. 第一次remove时,expected=1 > current_max=0,调整次数+1,current_max=3
  2. 第二次remove时,expected=2 > current_max=3,调整次数+1,current_max=3
  3. 总调整次数为2。

综合分析

  1. 时间复杂度:O(n)

    • 每条指令处理时间为O(1),总共有2n条指令,时间复杂度为O(n)。
  2. 空间复杂度:O(1)

    • 仅使用固定数量的变量,不随输入规模增长。
  3. 优势

    • 无需模拟队列:通过维护current_maxglobal_max,避免了实际队列操作的复杂度。
    • 高效判断调整条件:直接通过数值比较确定是否需要调整,时间复杂度为O(1)。
  4. 适用场景

    • 输入规模大(n ≤ 3×10⁵)时,依然保持高效。
    • 适用于需要快速判断调整条件的场景,如实时系统或高频交易。

GO

问题分析

我们需要处理一个特异性的双端队列,队列只能从头部或尾部添加元素,但移除只能从头部。目标是按顺序移除1到n的元素,计算最小调整次数。调整指的是重新排列队列,使头部元素为当前期望值。

解题思路

  1. 维护连续区间:跟踪当前可以连续移除的最大值 currentMax,所有已添加元素的最大值 globalMax
  2. 添加操作:若添加元素等于 currentMax + 1,则扩展连续区间;否则更新 globalMax
  3. 移除操作:若期望值超过 currentMax,则调整队列,将 currentMax 设为 globalMax,调整次数加一。

代码实现

package mainimport ("bufio""fmt""os""strconv""strings"
)func main() {scanner := bufio.NewScanner(os.Stdin)// 读取nscanner.Scan()n, _ := strconv.Atoi(scanner.Text())expected := 1       // 期望的下一个移除元素(初始为1)currentMax := 0    // 当前连续区间的最大值globalMax := 0     // 所有已添加元素的最大值adjusts := 0       // 调整次数计数器// 处理2n条指令for i := 0; i < 2*n; i++ {scanner.Scan()line := scanner.Text()if line == "remove" {// 移除操作:检查是否需要调整if expected > currentMax {adjusts++currentMax = globalMax}expected++} else {// 解析添加操作中的数值(格式:head add x 或 tail add x)parts := strings.Split(line, " ")x, _ := strconv.Atoi(parts[2])// 更新全局最大值if x > globalMax {globalMax = x}// 若元素是连续区间的下一个值,扩展区间if x == currentMax + 1 {currentMax = x}}}fmt.Println(adjusts)
}

代码详细解析

  1. 输入处理

    • 使用 bufio.Scanner 逐行读取输入,第一行为 n
    • 初始化关键变量:
      • expected:下一个期望移除的元素,初始为1。
      • currentMax:当前连续区间的最大值,初始为0。
      • globalMax:所有已添加元素的最大值,初始为0。
      • adjusts:调整次数计数器。
  2. 处理指令

    for i := 0; i < 2*n; i++ {scanner.Scan()line := scanner.Text()
    
    • 循环读取每条指令(共 2n 条)。
  3. 移除操作

    if line == "remove" {if expected > currentMax {adjusts++currentMax = globalMax}expected++
    }
    
    • 当需要移除的 expected 超过 currentMax 时,必须调整队列。
    • 调整次数加一,并将 currentMax 设为 globalMax
    • expected 递增,准备处理下一个元素。
  4. 添加操作

    parts := strings.Split(line, " ")
    x, _ := strconv.Atoi(parts[2])if x > globalMax {globalMax = x
    }if x == currentMax + 1 {currentMax = x
    }
    
    • 解析添加操作中的数值(如 head add 1 中的 1)。
    • 更新 globalMax 为所有已添加元素的最大值。
    • 若当前元素是 currentMax + 1,则扩展连续区间。

示例测试

示例输入

5  
head add 1  
tail add 2  
remove  
head add 3  
tail add 4  
head add 5  
remove  
remove  
remove  
remove  

输出

1

解析

  • 添加1和2后,currentMax=2
  • 第一次移除时,expected=1 <= currentMax=2,无需调整。
  • 添加3、4、5时,globalMax=5,但 currentMax 保持2(因为3不连续)。
  • 当移除 expected=3 时,触发调整,adjusts=1currentMax=5
  • 后续移除操作无需调整。

另一个测试用例

3  
head add 3  
tail add 1  
remove  
tail add 2  
remove  
remove  

输出

2

解析

  • 添加3和1后,globalMax=3,但 currentMax=0(元素不连续)。
  • 第一次移除时,expected=1 > currentMax=0,调整次数+1,currentMax=3
  • 第二次移除时,expected=2 > currentMax=3,调整次数+1。
  • 总调整次数为2。

综合分析

  1. 时间复杂度:O(n)

    • 每条指令处理时间为O(1),总共有2n条指令,时间复杂度为O(n)。
  2. 空间复杂度:O(1)

    • 仅使用固定数量的变量,不随输入规模增长。
  3. 优势

    • 无需模拟队列:通过维护 currentMaxglobalMax,避免了实际队列操作的复杂度。
    • 高效判断调整条件:直接通过数值比较确定是否需要调整,时间复杂度为O(1)。
  4. 适用场景

    • 输入规模大(n ≤ 3×10⁵)时,依然保持高效。
    • 适用于需要快速判断调整条件的场景,如实时系统或高频交易。

更多内容:

https://www.kdocs.cn/l/cvk0eoGYucWA

本文发表于【纪元A梦】,关注我,获取更多实用教程/资源!

相关文章:

华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《最小的调…...

java+postgresql+swagger-多表关联insert操作(九)

入参为json&#xff0c;然后根据需要对多张表进行操作&#xff1a; 入参格式&#xff1a; {"username": "车主01","usertel": "11111111111","useridtype": "2","useridcard": null,"proname&qu…...

[密码学基础]国密算法深度解析:中国密码标准的自主化之路

国密算法深度解析&#xff1a;中国密码标准的自主化之路 国密算法&#xff08;SM系列算法&#xff09;是中国自主研发的密码技术标准体系&#xff0c;旨在打破国际密码技术垄断&#xff0c;保障国家信息安全。本文将从技术原理、应用场景和生态发展三个维度&#xff0c;全面解…...

Flink-01学习 介绍Flink及上手小项目之词频统计

flink简介 官网 概述&#xff1a; 学习Flink具体包括四个关键概念&#xff1a;流数据的持续处理&#xff0c;事件时间&#xff0c;有状态流处理和状态快照。 Apache Flink 是一个开源的流处理框架&#xff0c;旨在处理批处理和实时数据处理&#xff0c;具有高吞吐量和低延迟的…...

自注意力机制、多头自注意力机制、填充掩码 Python实现

原理讲解 【Transformer系列&#xff08;2&#xff09;】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解 自注意力机制 import torch import torch.nn as nn# 自注意力机制 class SelfAttention(nn.Module):def __init__(self, input…...

目标检测篇---R-CNN梳理

目标检测系列文章 第一章 R-CNN 目录 目标检测系列文章&#x1f4c4; 论文标题&#x1f9e0; 论文逻辑梳理1. 引言部分梳理 (动机与思想) &#x1f4dd; 三句话总结&#x1f50d; 方法逻辑梳理&#x1f680; 关键创新点&#x1f517; 方法流程图补充边界框回归 (BBR)1. BBR 的…...

C#处理网络传输中不完整的数据流

1、背景 在读取byte数组的场景&#xff08;例如&#xff1a;读取文件、网络传输数据&#xff09;中&#xff0c;特别是网络传输的场景中&#xff0c;非常有可能接收了不完整的byte数组&#xff0c;在将byte数组转换时&#xff0c;因字符的缺失/增多&#xff0c;转为乱码。如下…...

HTML 初识

段落标签 <p><!-- 段落标签 -->Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugiat, voluptate iure. Obcaecati explicabo sint ipsum impedit! Dolorum omnis voluptas sint unde sed, ipsa molestiae quo sapiente quos et ad reprehenderit.&l…...

MATLAB 训练CNN模型 yolo v4

学生对小车控制提出了更好的要求&#xff0c;能否加入深度学习模型。 考虑到小车用matlab来做&#xff0c;yolo v5及以上版本都需要在pytorch下训练&#xff0c;还是用早期版本来演示。 1 yolov4 调用 参考 trainYOLOv4ObjectDetector (mathworks.com) name "tiny-yo…...

【前端】跟着maxkb学习logicflow流程图画法

文章目录 背景1. 选定学习对象-maxkb应用逻辑编排2. 确定实现框架3. 关键逻辑&#xff1a;查看app-node.js4. 学习开始节点绘制流程数据形式 5. 给节点增加表单输入框遇到过的问题 背景 看看前端如何绘制流程图&#xff0c;界面好看点。 "logicflow/core": "1.…...

数据结构-C语言版本(八)字符串

数据结构中的字符串&#xff1a;概念、操作与实战 第一部分 字符串的分类及常见形式 字符串是由零个或多个字符组成的有限序列&#xff0c;是编程中最基础也最重要的数据结构之一。 1. C语言中的字符串表示 字符数组形式 char str1[10] {H, e, l, l, o, \0};字符串字面量…...

Arduino示例代码讲解:Project 07 - Keyboard 键盘

Arduino示例代码讲解:Project 07 - Keyboard 键盘 Project 07 - Keyboard 键盘程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数读取电位器值:打印电位器值:播放音调:运行过程注意事项Project 07 - Keyboard 键盘 /*Arduino Starter Kit e…...

oracle expdp/impdp 用法详解

oracle expdp/impdp 用法详解 创建逻辑目录&#xff0c;该命令不会在操作系统创建真正的目录&#xff0c;最好以system等管理员创建。 create directory db_bak as d:\test\dump; 查看管理理员目录&#xff08;同时查看操作系统是否存在&#xff0c;因为Oracle并不关心该目录是…...

【漏洞复现】CVE-2024-38856(ApacheOfbiz RCE)

【漏洞复现】CVE-2024-38856&#xff08;ApacheOfbiz RCE&#xff09; 1. 漏洞描述 Apache OFBiz 是一个开源的企业资源规划&#xff08;ERP&#xff09;系统。它提供了一套企业应用程序&#xff0c;用于集成和自动化企业的许多业务流程。 这个漏洞是由于对 CVE-2023-51467 的…...

超详细VMware虚拟机扩容磁盘容量-无坑版

1.环境&#xff1a; 虚拟机&#xff1a;VMware Workstation 17 Pro-17.5.2 Linux系统&#xff1a;Ubuntu 22.04 LTS 2.硬盘容量 虚拟机当前硬盘容量180G -> 扩展至 300G 3.操作步骤 &#xff08;1&#xff09;在虚拟机关机的状态下&#xff0c;虚拟机硬盘扩容之前必…...

每日一题算法——移除链表元素、反转链表

移除链表元素 力扣题目链接 我的解法&#xff1a; 注意细节&#xff1a;要删掉移除的元素。 class Solution { public:ListNode* removeElements(ListNode* head, int val) {while(head!nullptr){if(head->valval){headhead->next;}}ListNode* nowhead head;while(n…...

全面理解Linux 系统日志:核心文件与查看方法

全文目录 1 Linux 系统日志分类及功能1.1 通用日志1.1.1 ‌/var/log/messages1.1.2 ‌/var/log/syslog 1.2 安全相关日志1.2.1 ‌/var/log/auth.log‌&#xff08;Debian/Ubuntu&#xff09;或 ‌/var/log/secure‌&#xff08;RHEL/CentOS&#xff09;1.2.2 /var/log/audit/au…...

机器学习-08-关联规则更新

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则和协同过滤。 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 【手撕算法】【Apriori】关联规则Apriori原理、代码…...

Flutter与FastAPI的OSS系统实现

作者&#xff1a;孙嘉成 目录 一、对象存储 二、FastAPI与对象存储 2.1 缤纷云S4服务API对接与鉴权实现 2.2 RESTful接口设计与异步路由优化 三、Flutter界面与数据交互开发 3.1 应用的创建 3.2页面的搭建 3.3 文件的上传 关键词&#xff1a;对象存储、FastAPI、Flutte…...

Kubernetes控制平面组件:API Server详解(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

MySQL-锁机制3-意向共享锁与意向排它锁、死锁

文章目录 一、意向锁二、死锁应该如何避免死锁问题&#xff1f; 总结 一、意向锁 在表获取共享锁或者排它锁时&#xff0c;需要先检查该表有没有被其它事务获取过X锁&#xff0c;通过意向锁可以避免大量的行锁扫描&#xff0c;提升表获取锁的效率。意向锁是一种表级锁&#xf…...

报告系统状态的连续日期 mysql + pandas(连续值判断)

本题用到知识点&#xff1a;row_number(), union, date_sub(), to_timedelta()…… 目录 思路 pandas Mysql 思路 链接&#xff1a;报告系统状态的连续日期 思路&#xff1a; 判断连续性常用的一个方法&#xff0c;增量相同的两个列的差值是固定的。 让日期与行号 * 天数…...

pytest自动化中关于使用fixture是否影响用例的独立性

第一个问题&#xff1a;难道使用fixture 会影响用例独立吗&#xff1f; ✅ 简单回答&#xff1a; 使用 fixture ≠ 不独立。 只要你的 fixture 是每次测试都能自己运行、自己产生数据的&#xff0c;那么测试用例依然是“逻辑独立”的。 ✅ 怎么判断 fixture 是否影响独立性&a…...

Token与axios拦截器

目录 一、Token 详解 1. Token 的定义与作用 2. Token 的工作流程 3. Token 的优势 4. Token 的安全实践 5. JWT 结构示例 二、Axios 拦截器详解 1. 拦截器的作用 2. 请求拦截器 3. 响应拦截器 4. 拦截器常见场景 5. 移除拦截器 三、完整代码示例 四、总结 五、…...

unity3d实现物体闪烁

unity3d实现物体闪烁&#xff0c;代码如下: using UnityEngine;public class Test : MonoBehaviour {//创建一个常量&#xff0c;用来接收时间的变化值private float shake;//通过控制物体的MeshRenderer组件的开关来实现物体闪烁的效果private MeshRenderer BoxColliderClick…...

C#—Lazy<T> 类型(延迟初始化/懒加载模式)

C# 的 Lazy<T> 类型 Lazy<T> 是 C# 中的一个类&#xff0c;用于实现延迟初始化&#xff08;懒加载&#xff09;模式。它提供了一种线程安全的方式来延迟创建大型或资源密集型对象&#xff0c;直到第一次实际需要时才进行初始化。 主要特点 延迟初始化&#xff1a…...

Spring Boot 项目启动命令解析

Spring Boot 项目启动命令参数 一、启动命令基础格式 java [JVM参数] [Spring Boot参数] -jar your-project.jar必选部分&#xff1a;java -jar your-project.jar 启动可执行 JAR 包。 可选部分&#xff1a; JVM 参数&#xff1a;控制 Java 虚拟机行为&#xff08;如内存、垃…...

为什么 Docker 容器中有额外的目录(如 `/dev`、`/proc`、`/sys`)?及 `docker run` 详细执行过程

、当你使用 docker run 启动一个基于极简镜像&#xff08;如 scratch 或手动构建的镜像&#xff09;的容器时&#xff0c;发现容器内出现了 /dev、/proc、/sys 等目录&#xff0c;即使你的镜像中并未包含这些目录。这是因为 Docker 在启动容器时&#xff0c;会自动挂载一些必要…...

Tailwind 武林奇谈:bg-blue-400 失效,如何重拾蓝衣神功?

前言 江湖有云,Tailwind CSS,乃前端武林中的轻功秘籍。习得此技,排版如行云流水,配色似御风随形,收放自如,随心所欲。 某日,小侠你奋笔敲码,正欲施展“蓝衣神功”(bg-blue-400),让按钮怒气冲冠、蓝光满面,怎料一招使出,画面竟一片白茫茫大地真干净,毫无半点杀气…...

【Docker 运维】Java 应用在 Docker 容器中启动报错:`unable to allocate file descriptor table`

文章目录 一、根本原因二、判断与排查方法三、解决方法1、限制 Docker 容器的文件描述符上限2、在执行脚本中动态设置ulimit的值3、升级至 Java 11 四、总结 容器内执行脚本时报错如下&#xff0c;Java 进程异常退出&#xff1a; library initialization failed - unable to a…...