【2024年华为OD机试】 (A卷,100分)- 二元组个数(Java JS PythonC/C++)

news2025/1/13 5:07:30

在这里插入图片描述

一、问题描述

以下是题目描述的 Markdown 格式:


题目描述

给定两个数组 ab,若 a[i] == b[j],则称 [i, j] 为一个二元组。求在给定的两个数组中,二元组的个数。


输入描述

  • 第一行输入 m,表示第一个数组的长度。
  • 第二行输入 m 个数,表示第一个数组 a
  • 第三行输入 n,表示第二个数组的长度。
  • 第四行输入 n 个数,表示第二个数组 b

输出描述

输出二元组的个数。


用例

用例 1

输入

4
1 2 3 4
1
1

输出

1

说明
二元组个数为 1 个。


用例 2

输入

6
1 1 2 2 4 5
3
2 2 4

输出

5

说明
二元组个数为 5 个。


代码实现思路

  1. 输入处理

    • 读取两个数组的长度 mn
    • 读取两个数组 ab
  2. 统计二元组

    • 遍历数组 ab,统计满足 a[i] == b[j] 的二元组个数。
  3. 输出结果

    • 输出统计结果。

题目解析

题目要求计算两个数组 arrMarrN 中相同元素的出现次数的乘积之和。具体来说,对于每个在 arrM 中出现的元素,如果它也在 arrN 中出现,则计算它在两个数组中出现次数的乘积,并将这些乘积相加。

问题分析

  1. 暴力解法

    • 使用双重 for 循环遍历 arrMarrN,统计相同元素的出现次数。
    • 时间复杂度为 O(m * n),其中 mn 分别是 arrMarrN 的长度。
    • 这种方法在 mn 较大时效率较低。
  2. 优化解法

    • 使用哈希表(字典)分别统计 arrMarrN 中每个元素的出现次数。
    • 然后遍历其中一个哈希表,计算相同元素的出现次数的乘积,并将这些乘积相加。
    • 时间复杂度为 O(m + n),空间复杂度为 O(m + n)

优化解法详细步骤

  1. 统计 arrM 中每个元素的出现次数

    • 使用一个哈希表 countM,键为元素,值为该元素在 arrM 中出现的次数。
  2. 统计 arrN 中每个元素的出现次数

    • 使用一个哈希表 countN,键为元素,值为该元素在 arrN 中出现的次数。
  3. 计算相同元素的出现次数的乘积

    • 遍历 countM,对于每个键 key,如果 key 也在 countN 中出现,则计算 countM[key] * countN[key],并将结果累加到 count 中。

二、JavaScript算法源码

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


代码实现

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

// 创建 readline 接口,用于从控制台读取输入
const rl = readline.createInterface({
  input: process.stdin,  // 输入流为标准输入
  output: process.stdout, // 输出流为标准输出
});

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

// 监听 'line' 事件,每次读取一行输入
rl.on("line", (line) => {
  lines.push(line); // 将输入的行数据存入 lines 数组

  // 当 lines 数组中有 4 行数据时,表示输入完成
  if (lines.length === 4) {
    // 解析输入数据
    const m = lines[0] - 0; // 第一个数组的长度,转换为数字
    const arrM = lines[1].split(" ").map(Number); // 第一个数组,转换为数字数组

    const n = lines[2] - 0; // 第二个数组的长度,转换为数字
    const arrN = lines[3].split(" ").map(Number); // 第二个数组,转换为数字数组

    // 调用算法函数,计算二元组个数并输出结果
    console.log(getResult(arrM, m, arrN, n));

    // 清空 lines 数组,以便处理下一组输入
    lines.length = 0;
  }
});

/**
 * 计算二元组个数的函数
 * @param {number[]} arrM 第一个数组
 * @param {number} m 第一个数组的长度
 * @param {number[]} arrN 第二个数组
 * @param {number} n 第二个数组的长度
 * @returns {number} 二元组的个数
 */
function getResult(arrM, m, arrN, n) {
  // 使用 Set 数据结构存储两个数组的元素,方便快速查找
  const setM = new Set(arrM); // 第一个数组的元素集合
  const setN = new Set(arrN); // 第二个数组的元素集合

  // 统计第一个数组中每个元素在第二个数组中出现的次数
  const countM = {};
  for (let m of arrM) {
    if (setN.has(m)) { // 如果第二个数组中包含当前元素
      countM[m] ? countM[m]++ : (countM[m] = 1); // 统计该元素的出现次数
    }
  }

  // 统计第二个数组中每个元素在第一个数组中出现的次数
  const countN = {};
  for (let n of arrN) {
    if (setM.has(n)) { // 如果第一个数组中包含当前元素
      countN[n] ? countN[n]++ : (countN[n] = 1); // 统计该元素的出现次数
    }
  }

  // 计算二元组的总数
  let count = 0;
  for (let k in countM) {
    // 对于每个共同元素,其二元组个数为 countM[k] * countN[k]
    count += countM[k] * countN[k];
  }

  // 返回二元组的总数
  return count;
}

代码讲解

1. 输入处理
  • 使用 readline 模块从控制台读取输入。
  • 将输入的行数据存储在 lines 数组中。
  • lines 数组中有 4 行数据时,表示输入完成,开始解析数据:
    • 第一行:第一个数组的长度 m
    • 第二行:第一个数组 arrM
    • 第三行:第二个数组的长度 n
    • 第四行:第二个数组 arrN
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 Set 存储数组元素
    • 将两个数组 arrMarrN 转换为 Set 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在 countM 对象中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在 countN 对象中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 Set 和哈希表(对象)高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

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

三、Java算法源码

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


代码实现

import java.util.*;
import java.util.stream.Collectors;

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

    // 读取第一个数组的长度 m
    int m = Integer.parseInt(sc.nextLine());
    // 读取第一个数组,并将其转换为 List<Integer>
    List<Integer> listM =
        Arrays.stream(sc.nextLine().split(" ")) // 按空格分割字符串
              .map(Integer::parseInt)          // 将字符串转换为整数
              .collect(Collectors.toList());   // 收集为 List

    // 读取第二个数组的长度 n
    int n = Integer.parseInt(sc.nextLine());
    // 读取第二个数组,并将其转换为 List<Integer>
    List<Integer> listN =
        Arrays.stream(sc.nextLine().split(" ")) // 按空格分割字符串
              .map(Integer::parseInt)          // 将字符串转换为整数
              .collect(Collectors.toList());   // 收集为 List

    // 调用算法函数,计算二元组个数并输出结果
    System.out.println(getResult(listM, listN));
  }

  /**
   * 计算二元组个数的函数
   * @param listM 第一个数组
   * @param listN 第二个数组
   * @return 二元组的个数
   */
  public static int getResult(List<Integer> listM, List<Integer> listN) {
    // 使用 HashSet 存储两个数组的元素,方便快速查找
    HashSet<Integer> setM = new HashSet<Integer>(listM); // 第一个数组的元素集合
    HashSet<Integer> setN = new HashSet<Integer>(listN); // 第二个数组的元素集合

    // 统计第一个数组中每个元素在第二个数组中出现的次数
    HashMap<Integer, Integer> countM = new HashMap<>();
    for (Integer m : listM) {
      if (setN.contains(m)) { // 如果第二个数组中包含当前元素
        // 使用 getOrDefault 方法统计该元素的出现次数
        countM.put(m, countM.getOrDefault(m, 0) + 1);
      }
    }

    // 统计第二个数组中每个元素在第一个数组中出现的次数
    HashMap<Integer, Integer> countN = new HashMap<>();
    for (Integer n : listN) {
      if (setM.contains(n)) { // 如果第一个数组中包含当前元素
        // 使用 getOrDefault 方法统计该元素的出现次数
        countN.put(n, countN.getOrDefault(n, 0) + 1);
      }
    }

    // 计算二元组的总数
    int count = 0;
    for (Integer k : countM.keySet()) {
      // 对于每个共同元素,其二元组个数为 countM.get(k) * countN.get(k)
      count += countM.get(k) * countN.get(k);
    }

    // 返回二元组的总数
    return count;
  }
}

代码讲解

1. 输入处理
  • 使用 Scanner 从控制台读取输入。
  • 读取第一个数组的长度 m 和数组内容,并将其转换为 List<Integer>
  • 读取第二个数组的长度 n 和数组内容,并将其转换为 List<Integer>
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 HashSet 存储数组元素
    • 将两个数组 listMlistN 转换为 HashSet 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 listM,统计每个元素在 listN 中出现的次数,结果存储在 countM 哈希表中。
    • 遍历 listN,统计每个元素在 listM 中出现的次数,结果存储在 countN 哈希表中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM.get(k) * countN.get(k)
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • listM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • listN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 HashSetHashMap 高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

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

四、Python算法源码

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


代码实现

# 输入获取
# 读取第一个数组的长度 m
m = int(input())
# 读取第一个数组,并将其转换为整数列表
arrM = list(map(int, input().split()))

# 读取第二个数组的长度 n
n = int(input())
# 读取第二个数组,并将其转换为整数列表
arrN = list(map(int, input().split()))


# 算法入口
def getResult(arrM, arrN):
    # 使用集合存储两个数组的元素,方便快速查找
    setM = set(arrM)  # 第一个数组的元素集合
    setN = set(arrN)  # 第二个数组的元素集合

    # 统计第一个数组中每个元素在第二个数组中出现的次数
    countM = {}
    for m in arrM:
        if m in setN:  # 如果第二个数组中包含当前元素
            if countM.get(m) is None:  # 如果该元素还未被统计过
                countM[m] = 1  # 初始化计数为 1
            else:
                countM[m] += 1  # 否则计数加 1

    # 统计第二个数组中每个元素在第一个数组中出现的次数
    countN = {}
    for n in arrN:
        if n in setM:  # 如果第一个数组中包含当前元素
            if countN.get(n) is None:  # 如果该元素还未被统计过
                countN[n] = 1  # 初始化计数为 1
            else:
                countN[n] += 1  # 否则计数加 1

    # 计算二元组的总数
    count = 0
    for k in countM.keys():  # 遍历所有共同元素
        # 对于每个共同元素,其二元组个数为 countM[k] * countN[k]
        count += countM[k] * countN[k]

    # 返回二元组的总数
    return count


# 算法调用
print(getResult(arrM, arrN))

代码讲解

1. 输入处理
  • 使用 input() 函数从控制台读取输入。
  • 读取第一个数组的长度 m 和数组内容,并将其转换为整数列表 arrM
  • 读取第二个数组的长度 n 和数组内容,并将其转换为整数列表 arrN
2. 算法逻辑:getResult 函数
  • 步骤 1:使用集合存储数组元素
    • 将两个数组 arrMarrN 转换为集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在字典 countM 中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在字典 countN 中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过集合和字典高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

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

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

以下是C++ 实现,并附有详细的中文注释和逻辑讲解:


C++ 代码实现

#include <iostream>
#include <vector>
#include <unordered_set>
#include <unordered_map>

using namespace std;

/**
 * 计算二元组个数的函数
 * @param arrM 第一个数组
 * @param arrN 第二个数组
 * @return 二元组的个数
 */
int getResult(const vector<int>& arrM, const vector<int>& arrN) {
    // 使用 unordered_set 存储两个数组的元素,方便快速查找
    unordered_set<int> setM(arrM.begin(), arrM.end()); // 第一个数组的元素集合
    unordered_set<int> setN(arrN.begin(), arrN.end()); // 第二个数组的元素集合

    // 统计第一个数组中每个元素在第二个数组中出现的次数
    unordered_map<int, int> countM;
    for (int m : arrM) {
        if (setN.count(m)) { // 如果第二个数组中包含当前元素
            countM[m]++; // 统计该元素的出现次数
        }
    }

    // 统计第二个数组中每个元素在第一个数组中出现的次数
    unordered_map<int, int> countN;
    for (int n : arrN) {
        if (setM.count(n)) { // 如果第一个数组中包含当前元素
            countN[n]++; // 统计该元素的出现次数
        }
    }

    // 计算二元组的总数
    int count = 0;
    for (const auto& pair : countM) {
        int k = pair.first; // 共同元素
        // 对于每个共同元素,其二元组个数为 countM[k] * countN[k]
        count += pair.second * countN[k];
    }

    // 返回二元组的总数
    return count;
}

int main() {
    // 读取第一个数组的长度 m
    int m;
    cin >> m;

    // 读取第一个数组
    vector<int> arrM(m);
    for (int i = 0; i < m; i++) {
        cin >> arrM[i];
    }

    // 读取第二个数组的长度 n
    int n;
    cin >> n;

    // 读取第二个数组
    vector<int> arrN(n);
    for (int i = 0; i < n; i++) {
        cin >> arrN[i];
    }

    // 调用算法函数,计算二元组个数并输出结果
    cout << getResult(arrM, arrN) << endl;

    return 0;
}

代码讲解

1. 输入处理
  • 使用 cin 从标准输入读取数据。
  • 读取第一个数组的长度 m 和数组内容,并将其存储在 vector<int> arrM 中。
  • 读取第二个数组的长度 n 和数组内容,并将其存储在 vector<int> arrN 中。
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 unordered_set 存储数组元素
    • 将两个数组 arrMarrN 转换为 unordered_set 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在 unordered_map<int, int> countM 中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在 unordered_map<int, int> countN 中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 unordered_setunordered_map 高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

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

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

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

相关文章

中学综合素质笔记2

第一章职业理念 第二节学生观 考情提示&#xff1a; 单选题材料分析题 学习要求&#xff1a; 理解、 识记、 一、以人为本的学生观 &#xff08;一&#xff09;学生是发展的人——动态变化 学生的身心发展是有规律的&#xff08;单选&#xff09; 顺序性、阶段性、不平衡…

Spring AMQP-保证消费者消息的可靠性

为什么要保证消息的可靠性&#xff1f; 当MQ向消费者发送一个消息之后需要得到消费者的状态&#xff0c;因为消息并不一定就真的被消费者给消费了&#xff0c;可能在消费的过程中出现了一些意外&#xff0c;比如 1. 网络问题 2. 消息转换有问题 3. 消费者本身的业务处理有问题 …

AI刷题-数位长度筛选问题、数值生成与运算问题

目录 一、数位长度筛选问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 关键点 最终代码&#xff1a; 运行结果&#xff1a; 二、数值生成与运算问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤…

算法学习(24)—— BFS解决拓扑排序

关于拓扑排序 ①有向无环图&#xff08;DAG图&#xff09; 就跟它的名字一样&#xff0c;有方向但是没有环的图&#xff0c;如下图&#xff1a;我们了解下入度和出度&#xff0c;二者都是针对一个点来说的&#xff0c;就以上图为例入度&#xff1a;表示有多少条边指向一个点&am…

【深度学习入门_基础篇】概率论

开坑本部分主要为基础知识复习&#xff0c;新开坑中&#xff0c;学习记录自用。 学习目标&#xff1a; 随机事件与概率、随机变量及其分布、多维随机变量及其分布、大数定律与中心极限定理。 强烈推荐此视频&#xff1a; 概率论_麻省理工公开课 废话不多说&#xff0c;直接…

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务&#xff0c;如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信&#xff0c;接收作业并提交到执行队列&#xff0c;Gitlab-Runner从队列中获取作业&#xff0c;并允许在不同环境下进行作…

多并发发短信处理(头条项目-07)

1 pipeline操作 Redis数据库 Redis 的 C/S 架构&#xff1a; 基于客户端-服务端模型以及请求/响应协议的 TCP服务。客户端向服务端发送⼀个查询请求&#xff0c;并监听Socket返回。通常是以 阻塞模式&#xff0c;等待服务端响应。服务端处理命令&#xff0c;并将结果返回给客…

OSPF - 1类LSA(Router-LSA)

前篇博客有对常用LSA的总结 1类LSA是OSPF计算最原始的材料&#xff0c;他会泛洪发给所有的路由器 LSA是包含在LSU中的&#xff0c;一条LSU能够携带多条LSA options位所有LSA都会有&#xff0c;用于标记起源于什么类型的区域&#xff0c;具体查看文章【邻居建立】 flags位是一…

pdf提取文本,表格以及转图片:spire.pdf

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; 1. pdfbox1.1导入pdfbox 的maven依赖1.1 提取文本1.2 提取文本表格&#xff08;可自行加入逻辑处理&#xff09;1.3 pdf转换成图片代码&…

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构&#xff1a; {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…

解决idea中无法拖动tab标签页的问题

1、按 Ctrl Alt S 打开设置&#xff0c;找到路径 File | Settings | Appearance & Behavior | Appearance 2、去掉勾选 Drag-and-drop with Alt pressed only 即可

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

QT c++ 样式 设置 按钮(QPushButton)的渐变色美化

上一篇文章中描述了标签的渐变色美化,本文描述按钮的渐变色美化。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h"#include <QVBoxLayout> #include <QLinearGradient> #include <QPushButton&…

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码&#xff1a;项目源码 解压项目源码到本地 打开IDEA 左上角&#xff1a;文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件&#xff0c;点击确定&#xff0c;根据图示步骤继续导入项目 查看项目目录&#xff…

【数据结构-堆】【二分】力扣3296. 移山所需的最少秒数

给你一个整数 mountainHeight 表示山的高度。 同时给你一个整数数组 workerTimes&#xff0c;表示工人们的工作时间&#xff08;单位&#xff1a;秒&#xff09;。 工人们需要 同时 进行工作以 降低 山的高度。对于工人 i : 山的高度降低 x&#xff0c;需要花费 workerTimes…

如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦

一、问题背景 自OceanBase 4.3.0版本起&#xff0c;支持了列存引擎&#xff0c;允许表和索引以行存、纯列存或行列冗余的形式创建&#xff0c;且这些存储方式可以自由组合。除了使用 show create table命令来查看表和索引的存储类型外&#xff0c;也有用户询问如何通过SQL语句…

CDA数据分析师一级经典错题知识点总结(3)

1、SEMMA 的基本思想是从样本数据开始&#xff0c;通过统计分析与可视化技术&#xff0c;发现并转换最有价值的预测变量&#xff0c;根据变量进行构建模型&#xff0c;并检验模型的可用性和准确性。【强调探索性】 2、CRISP-DM模型Cross Industry Standard Process of Data Mi…

算法题(32):三数之和

审题&#xff1a; 需要我们找到满足以下三个条件的所有三元组&#xff0c;并存在二维数组中返回 1.三个元素相加为0 2.三个元素的下标不可相同 3.三元组的元素不可相同 思路&#xff1a; 混乱的数据不利于进行操作&#xff0c;所以我们先进行排序 我们可以采取枚举的方法进行解…

【设计模式】介绍常见的设计模式

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 ✨ 介绍一下常见的设计模式✨ Spring 中常见的设计模式 这期内容主要是总结一下常见的设计模式&#xff0c;可…