【2024年华为OD机试】 (CD卷,100分)- 最大N个数与最小N个数的和(Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目描述

给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。

说明:

  • 数组中数字范围 [0, 1000]
  • 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回 -1
  • 输入非法返回 -1

输入描述

第一行输入 MM 标识数组大小
第二行输入 M 个数,标识数组内容
第三行输入 NN 表达需要计算的最大、最小N个数

输出描述

输出最大N个数与最小N个数的和

用例

用例 1

输入:

5
95 88 83 64 100
2

输出:

342

说明:
最大2个数 [100, 95],最小2个数 [83, 64],输出为 342。

用例 2

输入:

5
3 2 3 4 2
2

输出:

-1

说明:
最大2个数 [4, 3],最小2个数 [3, 2],有重叠输出为 -1。

题目解析

本题是一个简单的逻辑题,主要考察数组常用方法的使用,以及数组去重如何实现。

详细步骤

  1. 读取输入

    • 读取数组大小 M
    • 读取数组内容。
    • 读取需要计算的最大、最小N个数 N
  2. 去重

    • 使用 Set 对数组进行去重,确保每个元素唯一。
  3. 排序

    • 对去重后的数组进行排序。
  4. 检查重叠

    • 检查最大N个数和最小N个数是否有重叠。
    • 如果有重叠,返回 -1。
  5. 计算和

    • 计算最大N个数和最小N个数的和。
  6. 输出结果

    • 输出计算结果。

用例解释

用例 1
  • 输入:
    • M = 5
    • 数组内容:95 88 83 64 100
    • N = 2
  • 输出:
    • 342

解释

  • 去重后的数组:[95, 88, 83, 64, 100]
  • 排序后的数组:[64, 83, 88, 95, 100]
  • 最大2个数:[100, 95]
  • 最小2个数:[64, 83]
  • 计算和:100 + 95 + 64 + 83 = 342
用例 2
  • 输入:
    • M = 5
    • 数组内容:3 2 3 4 2
    • N = 2
  • 输出:
    • -1

解释

  • 去重后的数组:[3, 2, 4]
  • 排序后的数组:[2, 3, 4]
  • 最大2个数:[4, 3]
  • 最小2个数:[3, 2]
  • 有重叠,返回 -1

通过上述步骤,我们可以高效地求出最大N个数与最小N个数的和,确保结果符合要求。这种方法的时间复杂度主要由排序操作决定,为 O(M log M),其中 M 是数组的长度。

二、JavaScript算法源码

以下是 JavaScript 代码 的详细中文注释和逻辑讲解:


JavaScript 代码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

// 创建 readline 接口实例
const rl = readline.createInterface({
  input: process.stdin,  // 输入流为标准输入
  output: process.stdout, // 输出流为标准输出
});

// 存储输入行的数组
const lines = [];

// 监听输入事件
rl.on("line", (line) => {
  lines.push(line); // 将输入行存入 lines 数组

  // 当输入行数达到 3 行时,开始处理输入
  if (lines.length === 3) {
    const m = lines[0] - 0; // 第一行输入:m,转换为数字
    const arr = lines[1].split(" ").map((ele) => Number(ele)); // 第二行输入:数组,转换为数字数组
    const n = lines[2] - 0; // 第三行输入:n,转换为数字

    // 调用算法函数并输出结果
    console.log(getResult(m, arr, n));

    // 清空 lines 数组,准备接收下一组输入
    lines.length = 0;
  }
});

// 算法函数
function getResult(m, arr, n) {
  const set = new Set(); // 使用 Set 去重

  // 遍历数组,检查每个值的合法性
  for (let val of arr) {
    if (val < 0 || val > 1000) return -1; // 如果值不在 0 到 1000 范围内,返回 -1
    set.add(val); // 将合法值添加到 Set 中
  }

  // 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
  if (set.size < n * 2) {
    return -1;
  }

  // 将 Set 转换为数组并排序
  arr = [...set].sort((a, b) => a - b);

  let l = 0; // 左指针,指向数组的最小值
  let r = arr.length - 1; // 右指针,指向数组的最大值
  let ans = 0; // 存储最终结果

  // 循环 n 次,每次取最小值和最大值相加
  while (n > 0) {
    ans += arr[l] + arr[r]; // 将最小值和最大值相加
    l++; // 左指针右移
    r--; // 右指针左移
    n--; // 减少剩余需要处理的次数
  }

  return ans; // 返回最终结果
}

代码逻辑讲解

1. 输入处理
  • 使用 readline 模块从控制台读取输入。
  • 输入分为 3 行:
    1. 第一行:m,表示数组的长度(代码中未使用)。
    2. 第二行:数组 arr,包含 m 个整数。
    3. 第三行:n,表示需要处理的次数。
  • 当输入行数达到 3 行时,调用算法函数 getResult 处理输入。

2. 算法逻辑
  • 去重与合法性检查
    • 使用 Set 对数组 arr 去重。
    • 检查每个值是否在 01000 范围内,如果超出范围,返回 -1
  • 数量检查
    • 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
  • 排序与计算
    • 将去重后的数组排序。
    • 使用双指针法:
      • 左指针 l 指向数组的最小值。
      • 右指针 r 指向数组的最大值。
      • 每次取最小值和最大值相加,并移动指针。
      • 重复 n 次,累加结果。

3. 返回结果
  • 返回累加的结果 ans

示例验证

示例 1:
  • 输入:
    5
    1 2 3 4 5
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2, 3, 4, 5]
    2. 排序后的数组:[1, 2, 3, 4, 5]
    3. 双指针计算:
      • 第一次:1 + 5 = 6
      • 第二次:2 + 4 = 6
    4. 结果:6 + 6 = 12
  • 输出:12
示例 2:
  • 输入:
    4
    10 20 30 40
    1
    
  • 处理过程:
    1. 去重后的数组:[10, 20, 30, 40]
    2. 排序后的数组:[10, 20, 30, 40]
    3. 双指针计算:
      • 第一次:10 + 40 = 50
    4. 结果:50
  • 输出:50
示例 3:
  • 输入:
    3
    1 1 2
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2]
    2. 数量检查:2 < 2 * 2,不满足条件。
    3. 结果:-1
  • 输出:-1

总结

  • 功能:从数组中选取 n 对最小值和最大值,计算它们的和。
  • 核心逻辑
    1. 去重并检查值的合法性。
    2. 检查去重后的元素数量是否满足条件。
    3. 使用双指针法计算最小值和最大值的和。
  • 适用场景:需要从数组中选取特定数量的最小值和最大值进行计算的场景。
  • 注意事项
    • 输入数组中的值必须在 01000 范围内。
    • 去重后的元素数量必须至少为 2n,否则无法满足条件。

如果有其他问题,欢迎随时提问!

三、Java算法源码

以下是 Java 代码 的详细中文注释和逻辑讲解:


Java 代码

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in); // 创建 Scanner 对象,用于读取输入

    int m = sc.nextInt(); // 读取数组的长度 m

    int[] arr = new int[m]; // 创建长度为 m 的数组
    for (int i = 0; i < m; i++) {
      arr[i] = sc.nextInt(); // 读取数组的每个元素
    }

    int n = sc.nextInt(); // 读取需要处理的次数 n

    System.out.println(getResult(m, arr, n)); // 调用算法函数并输出结果
  }

  // 算法函数
  public static int getResult(int m, int[] arr, int n) {
    HashSet<Integer> set = new HashSet<>(); // 使用 HashSet 去重

    // 遍历数组,检查每个值的合法性
    for (int val : arr) {
      if (val < 0 || val > 1000) return -1; // 如果值不在 0 到 1000 范围内,返回 -1
      set.add(val); // 将合法值添加到 HashSet 中
    }

    // 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
    if (set.size() < n * 2) return -1;

    // 将 HashSet 转换为数组并排序
    Integer[] distinct_arr = set.toArray(new Integer[0]);
    Arrays.sort(distinct_arr, (a, b) -> a - b);

    int l = 0; // 左指针,指向数组的最小值
    int r = distinct_arr.length - 1; // 右指针,指向数组的最大值
    int ans = 0; // 存储最终结果

    // 循环 n 次,每次取最小值和最大值相加
    while (n > 0) {
      ans += distinct_arr[l] + distinct_arr[r]; // 将最小值和最大值相加
      l++; // 左指针右移
      r--; // 右指针左移
      n--; // 减少剩余需要处理的次数
    }

    return ans; // 返回最终结果
  }
}

代码逻辑讲解

1. 输入处理
  • 使用 Scanner 从控制台读取输入。
  • 输入分为 3 部分:
    1. 第一行:m,表示数组的长度。
    2. 第二行:数组 arr,包含 m 个整数。
    3. 第三行:n,表示需要处理的次数。

2. 算法逻辑
  • 去重与合法性检查
    • 使用 HashSet 对数组 arr 去重。
    • 检查每个值是否在 01000 范围内,如果超出范围,返回 -1
  • 数量检查
    • 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
  • 排序与计算
    • 将去重后的数组转换为 Integer 数组并排序。
    • 使用双指针法:
      • 左指针 l 指向数组的最小值。
      • 右指针 r 指向数组的最大值。
      • 每次取最小值和最大值相加,并移动指针。
      • 重复 n 次,累加结果。

3. 返回结果
  • 返回累加的结果 ans

示例验证

示例 1:
  • 输入:
    5
    1 2 3 4 5
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2, 3, 4, 5]
    2. 排序后的数组:[1, 2, 3, 4, 5]
    3. 双指针计算:
      • 第一次:1 + 5 = 6
      • 第二次:2 + 4 = 6
    4. 结果:6 + 6 = 12
  • 输出:12
示例 2:
  • 输入:
    4
    10 20 30 40
    1
    
  • 处理过程:
    1. 去重后的数组:[10, 20, 30, 40]
    2. 排序后的数组:[10, 20, 30, 40]
    3. 双指针计算:
      • 第一次:10 + 40 = 50
    4. 结果:50
  • 输出:50
示例 3:
  • 输入:
    3
    1 1 2
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2]
    2. 数量检查:2 < 2 * 2,不满足条件。
    3. 结果:-1
  • 输出:-1

总结

  • 功能:从数组中选取 n 对最小值和最大值,计算它们的和。
  • 核心逻辑
    1. 去重并检查值的合法性。
    2. 检查去重后的元素数量是否满足条件。
    3. 使用双指针法计算最小值和最大值的和。
  • 适用场景:需要从数组中选取特定数量的最小值和最大值进行计算的场景。
  • 注意事项
    • 输入数组中的值必须在 01000 范围内。
    • 去重后的元素数量必须至少为 2n,否则无法满足条件。

如果有其他问题,欢迎随时提问!

四、Python算法源码

以下是 Python 代码 的详细中文注释和逻辑讲解:


Python 代码

# 输入获取
m = int(input())  # 读取数组的长度 m
arr = list(map(int, input().split()))  # 读取数组的每个元素,并转换为整数列表
n = int(input())  # 读取需要处理的次数 n


# 算法入口
def getResult(m, arr, n):
    # 对数组进行去重
    arr = list(set(arr))

    # 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
    if len(arr) < n * 2:
        return -1

    # 对数组进行排序
    arr.sort()

    # 数组中数字范围[0, 1000],如果超出范围,返回-1
    if arr[0] < 0 or arr[-1] > 1000:
        return -1

    # 计算最大N个数与最小N个数的和
    return sum(arr[:n]) + sum(arr[-n:])


# 算法调用
print(getResult(m, arr, n))  # 调用算法函数并输出结果

代码逻辑讲解

1. 输入处理
  • 使用 input() 函数从控制台读取输入。
  • 输入分为 3 部分:
    1. 第一行:m,表示数组的长度。
    2. 第二行:数组 arr,包含 m 个整数。
    3. 第三行:n,表示需要处理的次数。

2. 算法逻辑
  • 去重
    • 使用 set 对数组 arr 去重,并转换为列表。
  • 数量检查
    • 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
  • 排序
    • 对去重后的数组进行升序排序。
  • 合法性检查
    • 检查数组中的最小值是否小于 0 或最大值是否大于 1000,如果超出范围,返回 -1
  • 计算和
    • 取数组的前 n 个最小值和后 n 个最大值,计算它们的和。

3. 返回结果
  • 返回最小值和最大值的和。

示例验证

示例 1:
  • 输入:
    5
    1 2 3 4 5
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2, 3, 4, 5]
    2. 排序后的数组:[1, 2, 3, 4, 5]
    3. 计算:
      • 最小值:1 + 2 = 3
      • 最大值:4 + 5 = 9
    4. 结果:3 + 9 = 12
  • 输出:12
示例 2:
  • 输入:
    4
    10 20 30 40
    1
    
  • 处理过程:
    1. 去重后的数组:[10, 20, 30, 40]
    2. 排序后的数组:[10, 20, 30, 40]
    3. 计算:
      • 最小值:10
      • 最大值:40
    4. 结果:10 + 40 = 50
  • 输出:50
示例 3:
  • 输入:
    3
    1 1 2
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2]
    2. 数量检查:2 < 2 * 2,不满足条件。
    3. 结果:-1
  • 输出:-1

总结

  • 功能:从数组中选取 n 个最小值和 n 个最大值,计算它们的和。
  • 核心逻辑
    1. 去重并检查值的合法性。
    2. 检查去重后的元素数量是否满足条件。
    3. 使用排序和切片计算最小值和最大值的和。
  • 适用场景:需要从数组中选取特定数量的最小值和最大值进行计算的场景。
  • 注意事项
    • 输入数组中的值必须在 01000 范围内。
    • 去重后的元素数量必须至少为 2n,否则无法满足条件。

如果有其他问题,欢迎随时提问!

五、C/C++算法源码:

以下是 C++ 代码C 语言代码 的详细中文注释和逻辑讲解:


C++ 代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_set>

using namespace std;

// 算法入口
int getResult(int m, vector<int>& arr, int n) {
    // 使用 unordered_set 对数组去重
    unordered_set<int> uniqueSet(arr.begin(), arr.end());
    vector<int> uniqueArr(uniqueSet.begin(), uniqueSet.end());

    // 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
    if (uniqueArr.size() < n * 2) {
        return -1;
    }

    // 对数组进行排序
    sort(uniqueArr.begin(), uniqueArr.end());

    // 数组中数字范围[0, 1000],如果超出范围,返回-1
    if (uniqueArr[0] < 0 || uniqueArr.back() > 1000) {
        return -1;
    }

    // 计算最大N个数与最小N个数的和
    int sumMin = 0, sumMax = 0;
    for (int i = 0; i < n; i++) {
        sumMin += uniqueArr[i];            // 前n个最小值
        sumMax += uniqueArr[uniqueArr.size() - 1 - i]; // 后n个最大值
    }

    return sumMin + sumMax;
}

int main() {
    // 输入获取
    int m, n;
    cin >> m;
    vector<int> arr(m);
    for (int i = 0; i < m; i++) {
        cin >> arr[i];
    }
    cin >> n;

    // 算法调用
    cout << getResult(m, arr, n) << endl;

    return 0;
}

C 语言代码

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于排序
int compare(const void* a, const void* b) {
    return (*(int*)a - *(int*)b);
}

// 算法入口
int getResult(int m, int arr[], int n) {
    // 使用数组去重
    int uniqueArr[1000]; // 假设数组最大长度为1000
    int uniqueCount = 0;

    for (int i = 0; i < m; i++) {
        int isDuplicate = 0;
        for (int j = 0; j < uniqueCount; j++) {
            if (arr[i] == uniqueArr[j]) {
                isDuplicate = 1;
                break;
            }
        }
        if (!isDuplicate) {
            uniqueArr[uniqueCount++] = arr[i];
        }
    }

    // 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
    if (uniqueCount < n * 2) {
        return -1;
    }

    // 对数组进行排序
    qsort(uniqueArr, uniqueCount, sizeof(int), compare);

    // 数组中数字范围[0, 1000],如果超出范围,返回-1
    if (uniqueArr[0] < 0 || uniqueArr[uniqueCount - 1] > 1000) {
        return -1;
    }

    // 计算最大N个数与最小N个数的和
    int sumMin = 0, sumMax = 0;
    for (int i = 0; i < n; i++) {
        sumMin += uniqueArr[i];            // 前n个最小值
        sumMax += uniqueArr[uniqueCount - 1 - i]; // 后n个最大值
    }

    return sumMin + sumMax;
}

int main() {
    // 输入获取
    int m, n;
    scanf("%d", &m);
    int arr[m];
    for (int i = 0; i < m; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &n);

    // 算法调用
    printf("%d\n", getResult(m, arr, n));

    return 0;
}

代码逻辑讲解

1. 输入处理
  • C++
    • 使用 cin 从控制台读取输入。
    • 输入分为 3 部分:
      1. 第一行:m,表示数组的长度。
      2. 第二行:数组 arr,包含 m 个整数。
      3. 第三行:n,表示需要处理的次数。
  • C 语言
    • 使用 scanf 从控制台读取输入。
    • 输入分为 3 部分:
      1. 第一行:m,表示数组的长度。
      2. 第二行:数组 arr,包含 m 个整数。
      3. 第三行:n,表示需要处理的次数。

2. 算法逻辑
  • 去重
    • C++:使用 unordered_set 对数组去重。
    • C 语言:手动遍历数组去重。
  • 数量检查
    • 如果去重后的元素数量小于 2n,无法满足条件,返回 -1
  • 排序
    • C++:使用 sort 函数对数组排序。
    • C 语言:使用 qsort 函数对数组排序。
  • 合法性检查
    • 检查数组中的最小值是否小于 0 或最大值是否大于 1000,如果超出范围,返回 -1
  • 计算和
    • 取数组的前 n 个最小值和后 n 个最大值,计算它们的和。

3. 返回结果
  • 返回最小值和最大值的和。

示例验证

示例 1:
  • 输入:
    5
    1 2 3 4 5
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2, 3, 4, 5]
    2. 排序后的数组:[1, 2, 3, 4, 5]
    3. 计算:
      • 最小值:1 + 2 = 3
      • 最大值:4 + 5 = 9
    4. 结果:3 + 9 = 12
  • 输出:12
示例 2:
  • 输入:
    4
    10 20 30 40
    1
    
  • 处理过程:
    1. 去重后的数组:[10, 20, 30, 40]
    2. 排序后的数组:[10, 20, 30, 40]
    3. 计算:
      • 最小值:10
      • 最大值:40
    4. 结果:10 + 40 = 50
  • 输出:50
示例 3:
  • 输入:
    3
    1 1 2
    2
    
  • 处理过程:
    1. 去重后的数组:[1, 2]
    2. 数量检查:2 < 2 * 2,不满足条件。
    3. 结果:-1
  • 输出:-1

总结

  • 功能:从数组中选取 n 个最小值和 n 个最大值,计算它们的和。
  • 核心逻辑
    1. 去重并检查值的合法性。
    2. 检查去重后的元素数量是否满足条件。
    3. 使用排序和切片计算最小值和最大值的和。
  • 适用场景:需要从数组中选取特定数量的最小值和最大值进行计算的场景。
  • 注意事项
    • 输入数组中的值必须在 01000 范围内。
    • 去重后的元素数量必须至少为 2n,否则无法满足条件。

如果有其他问题,欢迎随时提问!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换&#xff0c;后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件&#xff1a; ToolboxCreator.exe/ini:toolboxcreator…

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor &#xff08;默认安装在C盘&#xff09; 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor&#xff0c;选择设置 选择Model&#xff0c;添加deepseek-chat 注意这里去掉其他的勾选项&…

《零基础Go语言算法实战》【题目 2-7】defer 关键字特性

《零基础Go语言算法实战》 【题目 2-7】defer 关键字特性 下面代码的输出是什么&#xff1f;请说明原因。 package main import ( "fmt" ) func main() { deferFunc() func deferFunc() { defer func() { fmt.Println("value1") }() defer func() {…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上&#xff0c;Mobileye展示了端到端自动驾驶系统Mobileye Drive™&#xff0c;通过高度集成的传感器、算法和计算平台&#xff0c;可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间&#xff0c;Mobileye创始人兼首席执行官Amnon …

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛&#xff0c;旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程&#xff0c;体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

超大规模分类(三):KNN softmax

传统的分类损失计算输入数据和每个类别中心的距离&#xff0c;来优化模型的训练。KNN softmax通过选择和输入数据最相关的top-K个类别&#xff0c;仅计算输入数据和top-K个类别中心的距离&#xff0c;以减小计算量。 KNN softmax首次诞生于达摩院机器智能技术实验室发表的SIGKD…

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务&#xff0c;并且提前备份数据&#xff01; 1.有sql文件时候。 打开navicat&#xff0c;运行sql文件 然后点击后面三个点&#xff0c;选中要运行的sql文件&#xff0c;开始。 鼠标右键刷新一下&#xff0c;就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言&#xff1a;AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中&#xff0c;企业对于智能化应用的需求日益增长。然而&#xff0c;传统的数据应用开发方式面临着诸多挑战&#xff0c;如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘

今天在学习fastapi的时候&#xff0c;发现一款数据库迁移工具&#xff0c;通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候&#xff0c; 彼其娘之。。 报了一些错误&#xff1a; Traceback (most recent ca…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

浅谈云计算07 | 云安全机制

浅谈云计算安全机制&#xff1a;全方位守护云端世界 一、引言二、加密技术&#xff1a;数据的隐形护盾三、散列机制&#xff1a;数据完整性的忠诚卫士四、数字签名&#xff1a;数据来源与真伪的鉴定专家五、公钥基础设施&#xff08;PKI&#xff09;&#xff1a;信任的基石六、…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出&#xff08;非Websocket&#xff09; 前言&#xff1a;流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口&#xff0c;用于接收服务器发送的事件流&#xff08;Server - Sent Events&#xff0c;SSE&#xff…

黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作

B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通&#xff0c;全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等 增强自控力 冥想慢呼吸绿色锻炼充分休息减少决策次数优先做重要的事情(早晨)融入强自控群控…

当你不小心使用了MySQL的保留字作为字段名而导致你的SQL语法解析错误该怎么办!

问题举例&#xff1a; 你在尝试更新一个名为 desc 的字段时遇到了 SQL 语法错误。原因是 desc 是 MySQL 的保留字&#xff0c;通常用于表示 ORDER BY 子句中的降序&#xff08;DESC&#xff09;&#xff0c;因此直接使用 desc 作为字段名会导致 SQL 解析错误。如下图&#xff…

excel设置好的可选择列数据后,如何快速输入到单元格中?

当设置好列的【数据】-【数据有效性】-【序列】后&#xff0c;在单元格中输入可选择数据的开头&#xff0c;就会提示出对应的可选择数据&#xff0c;然后&#xff0c;按一下键盘上的【↓】键&#xff0c;再按回车&#xff0c;即可快速输入到单元格中。

2025封禁指定国家ip-安装xtables-addons记录

如何安装和使用 安装lux仓库(该仓库包含xtables-addons所需的依赖环境) # wget http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm # rpm -ivh lux-release-7-1.noarch.rpm 安装xtables-addons。注意&#xff1a;必须先安装kmod-xtables-addons&#xff0c;再…

力扣 岛屿数量

从某个点找&#xff0c;不断找相邻位置。 题目 岛屿中被“0”隔开后 &#xff0c;是每一小块状的“1”&#xff0c;本题在问有多少块。可以用dfs进行搜索&#xff0c;遍历每一个点&#xff0c;把每一个点的上下左右做搜索检测&#xff0c;当检测到就标记为“0”表示已访问过&a…