【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)

news2025/1/12 8:00:22

在这里插入图片描述

一、问题描述

题目描述

对称就是最大的美学,现有一道关于对称字符串的美学。已知:

  • 第1个字符串:R
  • 第2个字符串:BR
  • 第3个字符串:RBBR
  • 第4个字符串:BRRBRBBR
  • 第5个字符串:RBBRBRRBBRRBRBBR

相信你已经发现规律了,没错!就是第 i 个字符串 = 第 i - 1 号字符串取反 + 第 i - 1 号字符串;

  • 取反(R->B, B->R);

现在告诉你 nk,让你求得第 n 个字符串的第 k 个字符是多少。(k的编号从0开始)

输入描述

第一行输入一个 T,表示有 T 组用例;

接下来输入 T 行,每行输入两个数字,表示 nk

  • 1 ≤ T ≤ 100;
  • 1 ≤ n ≤ 64;
  • 0 ≤ k < 2^(n-1);

输出描述

输出 T 行表示答案;

  • 输出 “blue” 表示字符是 B;
  • 输出 “red” 表示字符是 R。

备注

  • 输出字符串区分大小写,请注意输出小写字符串,不带双引号。

用例

用例 1

输入:

5
1 0
2 1
3 2
4 6
5 8

输出:

red
red
blue
blue
blue

说明:

  • 第 1 个字符串:R -> 第 0 个字符为 R
  • 第 2 个字符串:BR -> 第 1 个字符为 R
  • 第 3 个字符串:RBBR -> 第 2 个字符为 B
  • 第 4 个字符串:BRRBRBBR -> 第 6 个字符为 B
  • 第 5 个字符串:RBBRBRRBBRRBRBBR -> 第 8 个字符为 B
用例 2

输入:

1
64 73709551616

输出:

red

说明:

解题思路

  1. 规律分析:第 i 个字符串的长度是 2^(i-1)。第 i 个字符串可以看作是第 i-1 个字符串取反后拼接第 i-1 个字符串。
  2. 递归关系:如果 k 小于第 i-1 个字符串的长度,那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符相同。如果 k 大于等于第 i-1 个字符串的长度,那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(i-2) 个字符取反。
  3. 递归终止条件:当 n 为 1 时,第 0 个字符为 R。

在这里插入图片描述

问题分析与规律探索

从题目描述和示例中,我们可以观察到字符串的生成规律。每个新的字符串都是由前一个字符串取反后拼接前一个字符串本身得到的。这个过程可以递归地进行,直到我们到达第一个字符串 “R”。

规律总结
  1. 递归定义

    • n 个字符串的长度是 2^(n-1)
    • n 个字符串 = 第 n-1 个字符串取反 + 第 n-1 个字符串。
  2. 递归终止条件

    • n = 1 时,字符串为 “R”。
  3. 递归关系

    • 如果 k < 2^(n-2),则第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符相同。
    • 如果 k >= 2^(n-2),则第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(n-2) 个字符取反。

递归解法

我们可以利用递归关系,通过递归调用逐步减少 nk,直到 n 为 1 时,直接返回结果。

在这里插入图片描述
好的,我们来详细解释这个规律,不使用代码。

规律解释

  1. 字符串生成规律

    • 第1个字符串:R
    • 第2个字符串:BR
    • 第3个字符串:RBBR
    • 第4个字符串:BRRBRBBR
    • 第5个字符串:RBBRBRRBBRRBRBBR
    • 第6个字符串:BRRBBRRBRBBRBRBBRBRRBBRRBRBBR
  2. 观察规律

    • 每个字符串的长度是 2^(n-1)
    • 每个字符串可以分为两部分:
      • 前半部分是前一个字符串取反。
      • 后半部分是前一个字符串本身。
  3. 递归关系

    • 如果 k 位于第 n 个字符串的前半部分(即 k < 2^(n-2)),那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k 个字符取反。
    • 如果 k 位于第 n 个字符串的后半部分(即 k >= 2^(n-2)),那么第 n 个字符串的第 k 个字符与第 n-1 个字符串的第 k - 2^(n-2) 个字符相同。
  4. 递归终止条件

    • n = 1 时,字符串为 R,第 0 个字符为 R
    • n = 2 时,字符串为 BR,第 0 个字符为 B,第 1 个字符为 R

详细步骤

  1. 确定 k 位于前半部分还是后半部分

    • 计算 mid = 2^(n-2)
    • 如果 k < mid,则 k 位于前半部分。
    • 如果 k >= mid,则 k 位于后半部分。
  2. 递归处理

    • 如果 k 位于前半部分:
      • 递归调用 get(n-1, k),并将结果取反。
    • 如果 k 位于后半部分:
      • 递归调用 get(n-1, k - mid),结果不变。
  3. 递归终止

    • n = 1 时,返回 R
    • n = 2 时,根据 k 的值返回 BR

用例解释

用例 1
  • 输入:1 0

    • 第1个字符串:R
    • 第0个字符:R -> 输出 red
  • 输入:2 1

    • 第2个字符串:BR
    • 第1个字符:R -> 输出 red
  • 输入:3 2

    • 第3个字符串:RBBR
    • 第2个字符:B -> 输出 blue
  • 输入:4 6

    • 第4个字符串:BRRBRBBR
    • 第6个字符:B -> 输出 blue
  • 输入:5 8

    • 第5个字符串:RBBRBRRBBRRBRBBR
    • 第8个字符:B -> 输出 blue
用例 2
  • 输入:64 73709551616
    • 通过递归关系,逐步减少 nk,直到 n 为 1 或 2。
    • 最终确定第 k 个字符为 R -> 输出 red

通过这种方式,我们可以高效地找到第 n 个字符串的第 k 个字符,而不需要生成整个字符串,从而避免了内存溢出的问题。

在这里插入图片描述
可以发现,其实get(n,k),如果k <= 2^(n-2) ,则相当于 get(n-1, k) 的颜色取反。

二、JavaScript算法源码

以下是 JavaScript 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(BigInt)以及递归逻辑的实现:


JavaScript 代码实现

const readline = require("readline");

// 创建控制台输入输出接口
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

// 存储输入行
const lines = [];
let t; // 测试用例的数量

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

  // 当读取到第一行时,解析测试用例的数量 t
  if (lines.length === 1) {
    t = BigInt(lines[0]); // 将 t 转换为 BigInt 类型
  }

  // 当读取到所有测试用例时,开始处理
  if (t && lines.length === Number(t) + 1) {
    lines.shift(); // 移除第一行(t 的值)
    const arr = lines.map((line) => line.split(" ").map(BigInt)); // 将每行输入转换为 BigInt 数组
    getResult(arr); // 调用主逻辑函数

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

// 主逻辑函数
function getResult(arr) {
  for (let [n, k] of arr) {
    console.log(getNK(n, k)); // 对每个测试用例调用 getNK 函数并输出结果
  }
}

// 递归函数,计算第 n 个字符串的第 k 个字符的颜色
function getNK(n, k) {
  // 如果 n 为 1,直接返回 "red"
  if (n === 1n) {
    return "red";
  }

  // 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"
  if (n === 2n) {
    if (k === 0n) return "blue";
    else return "red";
  }

  // 计算第 n 个字符串的一半长度 half
  let half = 1n << (n - 2n); // 1n << (n - 2n) 等价于 2^(n-2)

  // 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符
  if (k >= half) {
    return getNK(n - 1n, k - half);
  } else {
    // 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反
    return getNK(n - 1n, k) === "red" ? "blue" : "red";
  }
}

代码讲解

1. 输入处理
  • 使用 readline 模块从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值转换为 BigInt 类型,以支持大数运算。
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n === 1n,直接返回 "red"
    • 如果 n === 2n,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 1n << (n - 2n),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和位运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 BigInt 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

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

三、Java算法源码

以下是 Java 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(long 类型)以及递归逻辑的实现:


Java 代码实现

import java.util.Scanner;

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

    int t = sc.nextInt(); // 读取测试用例的数量 t

    long[][] arr = new long[t][2]; // 创建一个二维数组,用于存储每个测试用例的 n 和 k
    for (int i = 0; i < t; i++) {
      arr[i][0] = sc.nextLong(); // 读取 n
      arr[i][1] = sc.nextLong(); // 读取 k
    }

    getResult(arr); // 调用主逻辑函数
  }

  // 主逻辑函数,处理每个测试用例
  public static void getResult(long[][] arr) {
    for (long[] nk : arr) {
      System.out.println(getNK(nk[0], nk[1])); // 调用 getNK 函数并输出结果
    }
  }

  // 递归函数,计算第 n 个字符串的第 k 个字符的颜色
  public static String getNK(long n, long k) {
    // 如果 n 为 1,直接返回 "red"
    if (n == 1) {
      return "red";
    }

    // 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"
    if (n == 2) {
      if (k == 0) return "blue";
      else return "red";
    }

    // 计算第 n 个字符串的一半长度 half
    long half = 1L << (n - 2); // 1L << (n - 2) 等价于 2^(n-2)

    // 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符
    if (k >= half) {
      return getNK(n - 1, k - half);
    } else {
      // 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反
      return "red".equals(getNK(n - 1, k)) ? "blue" : "red";
    }
  }
}

代码讲解

1. 输入处理
  • 使用 Scanner 从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到二维数组 arr 中,arr[i][0] 存储 narr[i][1] 存储 k
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 1L << (n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和位运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 long 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

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

四、Python算法源码

以下是 Python 代码的详细中文注释和逻辑讲解,重点在于如何处理大数(Python 支持任意大整数)以及递归逻辑的实现:


Python 代码实现

import math  # 导入 math 模块,用于数学运算

# 输入获取
t = int(input())  # 读取测试用例的数量 t
# 读取每个测试用例的 n 和 k,并将其转换为 float 类型(虽然题目中 n 和 k 是整数,但代码中使用了 float)
arr = [list(map(float, input().split())) for i in range(t)]


# 算法入口
def getResult(arr):
    for n, k in arr:  # 遍历每个测试用例
        print(getNK(n, k))  # 调用 getNK 函数并输出结果


# 递归函数,计算第 n 个字符串的第 k 个字符的颜色
def getNK(n, k):
    # 如果 n 为 1,直接返回 "red"
    if n == 1:
        return "red"

    # 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"
    if n == 2:
        if k == 0:
            return "blue"
        else:
            return "red"

    # 计算第 n 个字符串的一半长度 half
    half = math.pow(2, n - 2)  # 使用 math.pow 计算 2^(n-2)

    # 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符
    if k >= half:
        return getNK(n - 1, k - half)
    else:
        # 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反
        return "blue" if getNK(n - 1, k) == "red" else "red"


# 调用算法
getResult(arr)

代码讲解

1. 输入处理
  • 使用 input() 函数从控制台读取输入。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到列表 arr 中,arr 的每个元素是一个包含 nk 的列表。
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 math.pow(2, n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和数学运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • Python 支持任意大整数运算,因此无需担心数值溢出问题。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

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

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

以下是 C++ 代码,并附上详细的中文注释和逻辑讲解:


C++ 代码实现

#include <iostream>
#include <vector>
#include <cmath> // 用于 pow 函数

using namespace std;

// 递归函数,计算第 n 个字符串的第 k 个字符的颜色
string getNK(long long n, long long k) {
    // 如果 n 为 1,直接返回 "red"
    if (n == 1) {
        return "red";
    }

    // 如果 n 为 2,根据 k 的值返回 "blue" 或 "red"
    if (n == 2) {
        if (k == 0) return "blue";
        else return "red";
    }

    // 计算第 n 个字符串的一半长度 half
    long long half = pow(2, n - 2); // 使用 pow 函数计算 2^(n-2)

    // 如果 k 大于等于 half,递归处理第 n-1 个字符串的第 k - half 个字符
    if (k >= half) {
        return getNK(n - 1, k - half);
    } else {
        // 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反
        return (getNK(n - 1, k) == "red") ? "blue" : "red";
    }
}

// 主逻辑函数,处理每个测试用例
void getResult(const vector<vector<long long>>& arr) {
    for (const auto& nk : arr) {
        cout << getNK(nk[0], nk[1]) << endl; // 调用 getNK 函数并输出结果
    }
}

int main() {
    // 输入获取
    int t;
    cin >> t; // 读取测试用例的数量 t

    vector<vector<long long>> arr(t, vector<long long>(2)); // 创建一个二维数组,用于存储每个测试用例的 n 和 k
    for (int i = 0; i < t; i++) {
        cin >> arr[i][0] >> arr[i][1]; // 读取 n 和 k
    }

    // 调用算法
    getResult(arr);

    return 0;
}

代码讲解

1. 输入处理
  • 使用 cin 从标准输入读取数据。
  • 第一行是测试用例的数量 t,后续每行是一个测试用例,包含两个值 nk
  • 将输入值存储到二维向量 arr 中,arr[i][0] 存储 narr[i][1] 存储 k
2. 主逻辑:getResult 函数
  • 遍历每个测试用例,调用 getNK 函数计算结果并输出。
3. 递归逻辑:getNK 函数
  • 基本情况
    • 如果 n == 1,直接返回 "red"
    • 如果 n == 2,根据 k 的值返回 "blue""red"
  • 递归情况
    • 计算第 n 个字符串的一半长度 half,公式为 pow(2, n - 2),即 2^(n-2)
    • 如果 k >= half,递归处理第 n-1 个字符串的第 k - half 个字符。
    • 否则,递归处理第 n-1 个字符串的第 k 个字符,并根据结果取反("red""blue""blue""red")。

示例解析

输入
2
3 2
4 5
运行结果
blue
red
  • 解析
    • 对于 n = 3k = 2
      • half = 2^(3-2) = 2
      • k >= half,递归处理 n = 2k = 2 - 2 = 0
      • 对于 n = 2k = 0,返回 "blue"
    • 对于 n = 4k = 5
      • half = 2^(4-2) = 4
      • k >= half,递归处理 n = 3k = 5 - 4 = 1
      • 对于 n = 3k = 1
        • half = 2^(3-2) = 2
        • k < half,递归处理 n = 2k = 1
        • 对于 n = 2k = 1,返回 "red"
        • 取反后返回 "blue"
      • 取反后返回 "red"

总结

  • 该代码通过递归和数学运算的方式,高效地计算第 n 个字符串的第 k 个字符的颜色。
  • 使用 long long 类型处理大数,确保计算的准确性。
  • 代码逻辑清晰,适用于解决类似递归问题的场景。

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

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

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

相关文章

c#集成npoi根据excel模板导出excel

NuGet中安装npoi 创建excel模板&#xff0c;替换其中的内容生成新的excel文件。 例子中主要写了这四种情况&#xff1a; 1、替换单个单元格内容&#xff1b; 2、替换横向多个单元格&#xff1b; 3、替换表格&#xff1b; 4、单元格中插入图片&#xff1b; using System.IO; …

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空&#xff08;NOT NULL&#xff09; 2. 列值唯一&#xff08;UNIQUE&#xff09; 3. 检查列值是否满足条件&#xff08;CHECK&#xff09; 元组上的约束 5.5 完…

一键部署Netdata系统无需公网IP轻松实现本地服务器的可视化监控

文章目录 前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

HBuilderX(uniapp)实现微信小程序获取用户头像、昵称、授权登录、获取用户手机号

前言&#xff1a;微信文档写的零零散散的&#xff0c;网上搜的教程&#xff0c;23年的教程还在教22年改版之前的东西&#xff0c;导致踩坑无数&#xff0c;所以自己写一下文档记录一下&#xff0c;帮助后来者&#xff0c;记录于2024.11.14 一.获取用户头像和昵称 首先阅读微信…

RabbitMQ基础(简单易懂)

什么是RabbitMQ&#xff1f; 它基于AMQP协议&#xff08;Advanced Message Queuing Protocol&#xff09;&#xff0c;一种为应用构建消息队列的标准协议。过程中&#xff0c;它提供了一些重要模块&#xff1a;为消息发送的Producer&#xff08;生产者&#xff09;&#xff0c…

【web靶场】之upload-labs专项训练(基于BUUCTF平台)

前言 该靶场&#xff0c;是通过平台BUUCTF在线评测中的靶场进行的&#xff0c;基于linux搭建的 当然若是想要该靶场&#xff0c;可以采用github上的醒目&#xff0c;点击后面文字即可访问c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场 或者本人分享在网盘中&a…

美摄科技为企业打造专属PC端视频编辑私有化部署方案

美摄科技&#xff0c;作为视频编辑技术的先行者&#xff0c;凭借其在多媒体处理领域的深厚积累&#xff0c;为企业量身打造了PC端视频编辑私有化部署解决方案&#xff0c;旨在帮助企业构建高效、安全、定制化的视频创作平台&#xff0c;赋能企业内容创新&#xff0c;提升品牌影…

Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接&#xff1a; https://element-plus.org/zh-CN/component/form.html 一、el-table表格行展开关闭箭头替换成加减号 注&#xff1a;Vue3在样式中修改箭头图标无效&#xff0c;可能我设置不对&#xff0c;欢迎各位来交流指导 转变思路&#xff1a;隐藏箭头&…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

【题解】—— LeetCode一周小结53

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结52 30.二叉树中的链表 题目链接&#xff1a;1367. 二叉树中的链…

Vue方法、计算机属性及侦听器

数组变化侦测 假设我们写了一个数组&#xff0c;现在想让该数组中新增一条数据,那么如何去实现呢&#xff1f; <template><h3>数组变化侦听</h3><button click"addListHandler">添加数据</button><ul><li v-for"(item…

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物&#xff1a;小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"&#xff08;或简称"Py"&#xff09;的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年&#xff0c;它的形象借鉴了真实的蟒蛇&#xff0c;但加入了一些可爱和友善的特点。小蟒蛇…

Linux (CentOS) 安装 Docker 和 Docker Compose

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

Unity热更新 之 Addressables(2) 本地/远端打包 流程测试

基础篇&#xff1a;Unity热更新 之 Addressables(1) 资源基础加载-CSDN博客 基础方法来源于唐老狮,我也是初学热更这一块&#xff0c;所有不保证步骤完全正确&#xff0c;如有不足还请斧正 目录 0.前提 1.本地打包 1.1.资源放入包 1.2.简化路径名称给出标签(如有需要的话) …

Openstack持久存储-Swift,Cinder,Manila三者之间的区别

总结不易&#xff0c;给个三连吧&#xff01;&#xff01;&#xff01; 补充&#xff1a; 文件共享存储服务Manila 在OpenStack生态系统中&#xff0c;Cinder和Manila分别提供了两种不同类型的存储服务&#xff0c;类似于传统的SAN&#xff08;存储区域网络&#xff09;和NAS&…

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法&#xff0c;以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…

JavaEE之线程池

前面我们了解了多个任务可以通过创建多个线程去处理&#xff0c;达到节约时间的效果&#xff0c;但是每一次的线程创建和销毁也是会消耗计算机资源的&#xff0c;那么我们是否可以将线程进阶一下&#xff0c;让消耗计算机的资源尽可能缩小呢&#xff1f;线程池可以达到此效果&a…

J-LangChain - 复杂智能链流式执行

系列文章索引 J-LangChain 入门 介绍 j-langchain是一个Java版的LangChain开发框架&#xff0c;具有灵活编排和流式执行能力&#xff0c;旨在简化和加速各类大模型应用在Java平台的落地开发。它提供了一组实用的工具和类&#xff0c;使得开发人员能够更轻松地构建类似于LangC…

《HeadFirst设计模式》笔记(上)

设计模式的目录&#xff1a; 1 设计模式介绍 要不断去学习如何利用其它开发人员的智慧与经验。学习前人的正统思想。 我们认为《Head First》的读者是一位学习者。 一些Head First的学习原则&#xff1a; 使其可视化将文字放在相关图形内部或附近&#xff0c;而不是放在底部…

springboot整合h2

在 Spring Boot 中整合 H2 数据库非常简单。H2 是一个轻量级的嵌入式数据库&#xff0c;非常适合开发和测试环境。以下是整合 H2 数据库的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;在你的 pom.xml 文件中添加 H2 数据库的依赖&#xff1a; <dependency><grou…