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

news2025/4/23 2:59:26

在这里插入图片描述

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 = 0

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

print(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 main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// 读取n
	scanner.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梦】,关注我,获取更多实用教程/资源!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

目标检测篇---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.…

【漏洞复现】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;虚拟机硬盘扩容之前必…

全面理解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;增量相同的两个列的差值是固定的。 让日期与行号 * 天数…

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

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

开始放飞之先搞个VSCode

文章目录 开始放飞之先搞个VSCode重要提醒安装VSCode下载MinGW-w64回到VSCode中去VSCode原生调试键盘问题遗留问题参考文献 开始放飞之先搞个VSCode 突然发现自己的新台式机上面连个像样的编程环境都没有&#xff0c;全是游戏了&#xff01;&#xff01;&#xff01;&#xff…

基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线。输出指标包括最小平均流动时间&#xff0c;最大完工时间&#xff0c;最小间隙时间。 2…

【仿Mudou库one thread per loop式并发服务器实现】SERVER服务器模块实现

SERVER服务器模块实现 1. Buffer模块2. Socket模块3. Channel模块4. Poller模块5. EventLoop模块5.1 TimerQueue模块5.2 TimeWheel整合到EventLoop5.1 EventLoop与线程结合5.2 EventLoop线程池 6. Connection模块7. Acceptor模块8. TcpServer模块 1. Buffer模块 Buffer模块&…

uniapp h5接入地图选点组件

uniapp h5接入地图选点组件 1、申请腾讯地图key2、代码接入2.1入口页面 &#xff08;pages/map/map&#xff09;templatescript 2.2选点页面&#xff08;pages/map/mapselect/mapselect&#xff09;templatescript 该内容只针对uniapp 打包h5接入地图选点组件做详细说明&#x…

【随缘更新,免积分下载】Selenium chromedriver驱动下载(最新版135.0.7049.42)

目录 一、chromedriver概述 二、chromedriver使用方式 三、chromedriver新版本下载&#x1f525;&#x1f525;&#x1f525; 四、Selenium与Chrome参数设置&#x1f525;&#x1f525; 五、Selenium直接操控已打开的Chrome浏览器&#x1f525;&#x1f525;&#x1f525;…