【2024年华为OD机试】 (B卷,100分)- 座位调整(Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目描述

疫情期间课堂的座位进行了特殊的调整,不能出现两个同学紧挨着,必须隔至少一个空位。

给你一个整数数组 desk 表示当前座位的占座情况,由若干 0 和 1 组成,其中 0 表示没有占位,1 表示占位。

在不改变原有座位秩序情况下,还能安排坐几个人?

输入描述

第一行是个子数组表示作为占座情况,由若干 0 和 1 组成,其中 0 表示没有占位,1 表示占位

输出描述

输出数值表示还能坐几个人

备注

1 ≤ desk.length ≤ 2 * 10^4

用例

输入

1,0,0,0,1

输出

1

说明
只有 desk[2] 的位置可以坐一个人

题目解析

我的解题思路如下:

  1. 解析输入:将输入解析为一个整型数组 desk,然后遍历每一个元素 desk[i]

  2. 检查空位

    • 如果 desk[i] == 0,则说明 desk[i] 是一个空位,此时只需要检查 desk[i] 的左右两边也是空位,则说明 desk[i] 可以坐人,此时将 desk[i] 更新为 1,表示坐人了。
    • 判断左右是否为空位的逻辑如下:
      • 如果 i == 0 || desk[i-1] == 0,则说明 desk[i] 左边是空位,i == 0 说明其左边没有其他座位了,也相当于空位。
      • 如果 i == desk.length - 1 || desk[i+1] == 0,则说明 desk[i] 右边也是空位,i == desk.length - 1 说明其右边没有其他座位了,也就相当于空位。
  3. 处理已占位

    • 如果 desk[i] != 0,则说明 desk[i] 不是一个空位,坐不了人,且说明了下一个 i+1 座位也不能坐人。

通过这种方法,我们可以有效地计算出在不改变原有座位秩序的情况下,还能安排坐几个人。时间复杂度为 O(n),其中 n 是 desk 的长度,因为我们只需要遍历数组一次。

二、JavaScript算法源码

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


JavaScript 代码实现

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline"); // 引入 readline 模块,用于读取控制台输入// 创建 readline.Interface 实例,用于处理输入和输出
const rl = readline.createInterface({input: process.stdin,  // 输入流为标准输入output: process.stdout, // 输出流为标准输出
});// 监听 'line' 事件,当用户输入一行数据时触发
rl.on("line", (line) => {// 将输入的一行数据按逗号分隔为字符串数组,然后转换为数字数组 deskconst desk = line.split(",").map(Number);// 调用 getResult 函数,计算可以坐下的学生数量,并输出结果console.log(getResult(desk));
});/*** 计算可以坐下的学生数量** @param {number[]} desk - 表示座位状态的数组,0 表示空座位,1 表示已占用* @returns {number} - 可以坐下的学生数量*/
function getResult(desk) {let ans = 0; // 定义变量 ans,用于记录可以坐下的学生数量// 遍历座位数组 deskfor (let i = 0; i < desk.length; i++) {if (desk[i] == 0) { // 如果当前座位是空的// 检查当前座位的左侧是否为空const isLeftEmpty = i == 0 || desk[i - 1] == 0;// 检查当前座位的右侧是否为空const isRightEmpty = i == desk.length - 1 || desk[i + 1] == 0;// 如果左侧和右侧都为空,则可以坐下if (isLeftEmpty && isRightEmpty) {ans++; // 学生数量加 1desk[i] = 1; // 将当前座位标记为已占用i++; // 跳过下一个座位,因为下一个座位不能坐人}}}return ans; // 返回可以坐下的学生数量
}

代码讲解

1. 输入处理

  • 使用 readline 模块读取控制台输入。
  • 监听 line 事件,当用户输入一行数据时触发回调函数。
  • 将输入的一行数据按逗号分隔为字符串数组,然后通过 map(Number) 转换为数字数组 desk
    • desk 数组表示座位的状态:
      • 0 表示空座位。
      • 1 表示已占用。

2. 主算法函数 getResult

  • 功能:计算可以坐下的学生数量。
  • 逻辑
    1. 遍历 desk 数组,检查每个座位是否为空(值为 0)。
    2. 对于每个空座位,检查其左侧和右侧是否为空:
      • 如果左侧和右侧都为空,则可以坐下。
    3. 如果可以坐下:
      • 学生数量 ans 加 1。
      • 将当前座位标记为已占用(值为 1)。
      • 跳过下一个座位(因为下一个座位不能坐人)。
  • 返回值:可以坐下的学生数量。

示例分析

示例 1

输入

0,0,1,0,0

输出

2

解释

  • 第一个空座位(索引 0)可以坐下,因为左侧和右侧都为空。
  • 第二个空座位(索引 3)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 2 名学生。

示例 2

输入

1,0,0,0,1

输出

1

解释

  • 只有第二个空座位(索引 2)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 1 名学生。

复杂度分析

  1. 时间复杂度

    • 遍历 desk 数组一次,时间复杂度为 O(n),其中 n 是数组的长度。
  2. 空间复杂度

    • 除了输入数组 desk 外,只使用了常数级别的额外空间,空间复杂度为 O(1)

总结

  • 该代码通过遍历座位数组,检查每个空座位的左右是否为空,来计算可以坐下的学生数量。
  • 使用 readline 模块处理控制台输入,适合 Node.js 环境下的 ACM 模式。
  • 如果有其他问题,欢迎继续提问!

三、Java算法源码

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


Java 代码实现

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建 Scanner 对象,用于读取输入Scanner sc = new Scanner(System.in);// 读取输入的一行数据,并将其按逗号分隔为字符串数组// 然后将字符串数组转换为整数数组 deskint[] desk = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();// 调用 getResult 方法,计算可以坐下的学生数量,并输出结果System.out.println(getResult(desk));}/*** 计算可以坐下的学生数量** @param desk 表示座位状态的数组,0 表示空座位,1 表示已占用* @return 可以坐下的学生数量*/public static int getResult(int[] desk) {int ans = 0; // 定义变量 ans,用于记录可以坐下的学生数量// 遍历座位数组 deskfor (int i = 0; i < desk.length; i++) {if (desk[i] == 0) { // 如果当前座位是空的// 检查当前座位的左侧是否为空boolean isLeftEmpty = (i == 0) || (desk[i - 1] == 0);// 检查当前座位的右侧是否为空boolean isRightEmpty = (i == desk.length - 1) || (desk[i + 1] == 0);// 如果左侧和右侧都为空,则可以坐下if (isLeftEmpty && isRightEmpty) {ans++; // 学生数量加 1desk[i] = 1; // 将当前座位标记为已占用i++; // 跳过下一个座位,因为下一个座位不能坐人}}}return ans; // 返回可以坐下的学生数量}
}

代码讲解

1. 输入处理

  • 使用 Scanner 读取输入的一行数据。
  • 将输入按逗号分隔为字符串数组,然后转换为整数数组 desk
    • desk 数组表示座位的状态:
      • 0 表示空座位。
      • 1 表示已占用。

2. 主算法函数 getResult

  • 功能:计算可以坐下的学生数量。
  • 逻辑
    1. 遍历 desk 数组,检查每个座位是否为空(值为 0)。
    2. 对于每个空座位,检查其左侧和右侧是否为空:
      • 如果左侧和右侧都为空,则可以坐下。
    3. 如果可以坐下:
      • 学生数量 ans 加 1。
      • 将当前座位标记为已占用(值为 1)。
      • 跳过下一个座位(因为下一个座位不能坐人)。
  • 返回值:可以坐下的学生数量。

示例分析

示例 1

输入

0,0,1,0,0

输出

2

解释

  • 第一个空座位(索引 0)可以坐下,因为左侧和右侧都为空。
  • 第二个空座位(索引 3)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 2 名学生。

示例 2

输入

1,0,0,0,1

输出

1

解释

  • 只有第二个空座位(索引 2)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 1 名学生。

复杂度分析

  1. 时间复杂度

    • 遍历 desk 数组一次,时间复杂度为 O(n),其中 n 是数组的长度。
  2. 空间复杂度

    • 除了输入数组 desk 外,只使用了常数级别的额外空间,空间复杂度为 O(1)

总结

  • 该代码通过遍历座位数组,检查每个空座位的左右是否为空,来计算可以坐下的学生数量。
  • 使用 ScannerArrays.stream 处理输入,适合 Java 的标准输入输出模式。
  • 如果有其他问题,欢迎继续提问!

四、Python算法源码

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


Python 代码实现

# 输入获取
# 从标准输入读取一行数据,按逗号分隔并转换为整数列表 desk
desk = list(map(int, input().split(",")))# 算法入口
def getResult():ans = 0  # 定义变量 ans,用于记录可以坐下的学生数量i = 0  # 初始化索引 i,用于遍历座位数组 deskwhile i < len(desk):  # 遍历座位数组if desk[i] == 0:  # 如果当前座位是空的# 检查当前座位的左侧是否为空isLeftEmpty = i == 0 or desk[i - 1] == 0# 检查当前座位的右侧是否为空isRightEmpty = i == len(desk) - 1 or desk[i + 1] == 0# 如果左侧和右侧都为空,则可以坐下if isLeftEmpty and isRightEmpty:ans += 1  # 学生数量加 1desk[i] = 1  # 将当前座位标记为已占用i += 1  # 跳过下一个座位,因为下一个座位不能坐人i += 1  # 继续检查下一个座位return ans  # 返回可以坐下的学生数量# 算法调用
print(getResult())  # 调用 getResult 函数并输出结果

代码讲解

1. 输入处理

  • 使用 input() 函数从标准输入读取一行数据。
  • 将输入按逗号分隔为字符串列表,然后通过 map(int, ...) 转换为整数列表 desk
    • desk 列表表示座位的状态:
      • 0 表示空座位。
      • 1 表示已占用。

2. 主算法函数 getResult

  • 功能:计算可以坐下的学生数量。
  • 逻辑
    1. 使用 while 循环遍历 desk 列表,检查每个座位是否为空(值为 0)。
    2. 对于每个空座位,检查其左侧和右侧是否为空:
      • 如果左侧和右侧都为空,则可以坐下。
    3. 如果可以坐下:
      • 学生数量 ans 加 1。
      • 将当前座位标记为已占用(值为 1)。
      • 跳过下一个座位(因为下一个座位不能坐人)。
    4. 继续检查下一个座位。
  • 返回值:可以坐下的学生数量。

示例分析

示例 1

输入

0,0,1,0,0

输出

2

解释

  • 第一个空座位(索引 0)可以坐下,因为左侧和右侧都为空。
  • 第二个空座位(索引 3)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 2 名学生。

示例 2

输入

1,0,0,0,1

输出

1

解释

  • 只有第二个空座位(索引 2)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 1 名学生。

复杂度分析

  1. 时间复杂度

    • 遍历 desk 列表一次,时间复杂度为 O(n),其中 n 是列表的长度。
  2. 空间复杂度

    • 除了输入列表 desk 外,只使用了常数级别的额外空间,空间复杂度为 O(1)

总结

  • 该代码通过遍历座位列表,检查每个空座位的左右是否为空,来计算可以坐下的学生数量。
  • 使用 input()split() 处理输入,适合 Python 的标准输入输出模式。
  • 如果有其他问题,欢迎继续提问!

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

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


C语言代码实现

#include <stdio.h>#define MAX_SIZE 20000 // 定义最大数组长度// 函数声明
int getResult(int* desk, int desk_size);int main() {int desk[MAX_SIZE]; // 定义数组 desk,用于存储座位状态int desk_size = 0;  // 定义变量 desk_size,用于记录数组长度// 从标准输入读取数据,以逗号分隔while (scanf("%d", &desk[desk_size++])) {if (getchar() != ',') break; // 如果下一个字符不是逗号,则结束输入}// 调用 getResult 函数,计算可以坐下的学生数量,并输出结果printf("%d\n", getResult(desk, desk_size));return 0;
}/*** 计算可以坐下的学生数量** @param desk - 表示座位状态的数组,0 表示空座位,1 表示已占用* @param desk_size - 数组的长度* @return 可以坐下的学生数量*/
int getResult(int* desk, int desk_size) {int ans = 0; // 定义变量 ans,用于记录可以坐下的学生数量// 遍历座位数组 deskfor (int i = 0; i < desk_size; i++) {if (desk[i] == 0) { // 如果当前座位是空的// 检查当前座位的左侧是否为空int isLeftEmpty = i == 0 || desk[i - 1] == 0;// 检查当前座位的右侧是否为空int isRightEmpty = i == desk_size - 1 || desk[i + 1] == 0;// 如果左侧和右侧都为空,则可以坐下if (isLeftEmpty && isRightEmpty) {ans++;       // 学生数量加 1desk[i] = 1; // 将当前座位标记为已占用i++;         // 跳过下一个座位,因为下一个座位不能坐人}}}return ans; // 返回可以坐下的学生数量
}

C++代码实现

#include <iostream>
#include <vector>using namespace std;/*** 计算可以坐下的学生数量** @param desk - 表示座位状态的数组,0 表示空座位,1 表示已占用* @return 可以坐下的学生数量*/
int getResult(vector<int>& desk) {int ans = 0; // 定义变量 ans,用于记录可以坐下的学生数量// 遍历座位数组 deskfor (int i = 0; i < desk.size(); i++) {if (desk[i] == 0) { // 如果当前座位是空的// 检查当前座位的左侧是否为空bool isLeftEmpty = i == 0 || desk[i - 1] == 0;// 检查当前座位的右侧是否为空bool isRightEmpty = i == desk.size() - 1 || desk[i + 1] == 0;// 如果左侧和右侧都为空,则可以坐下if (isLeftEmpty && isRightEmpty) {ans++;       // 学生数量加 1desk[i] = 1; // 将当前座位标记为已占用i++;         // 跳过下一个座位,因为下一个座位不能坐人}}}return ans; // 返回可以坐下的学生数量
}int main() {vector<int> desk; // 定义动态数组 desk,用于存储座位状态int num;char sep;// 从标准输入读取数据,以逗号分隔while (cin >> num) {desk.push_back(num); // 将数字添加到 desk 数组中if (cin.peek() != ',') break; // 如果下一个字符不是逗号,则结束输入cin >> sep; // 读取逗号}// 调用 getResult 函数,计算可以坐下的学生数量,并输出结果cout << getResult(desk) << endl;return 0;
}

代码讲解

1. 输入处理

  • C语言
    • 使用 scanf 从标准输入读取整数,并通过 getchar 检查下一个字符是否为逗号。
    • 将读取的数据存储到数组 desk 中,并记录数组长度 desk_size
  • C++
    • 使用 cin 从标准输入读取整数,并通过 cin.peek 检查下一个字符是否为逗号。
    • 将读取的数据存储到动态数组 desk 中。

2. 主算法函数 getResult

  • 功能:计算可以坐下的学生数量。
  • 逻辑
    1. 遍历座位数组 desk,检查每个座位是否为空(值为 0)。
    2. 对于每个空座位,检查其左侧和右侧是否为空:
      • 如果左侧和右侧都为空,则可以坐下。
    3. 如果可以坐下:
      • 学生数量 ans 加 1。
      • 将当前座位标记为已占用(值为 1)。
      • 跳过下一个座位(因为下一个座位不能坐人)。
  • 返回值:可以坐下的学生数量。

示例分析

示例 1

输入

0,0,1,0,0

输出

2

解释

  • 第一个空座位(索引 0)可以坐下,因为左侧和右侧都为空。
  • 第二个空座位(索引 3)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 2 名学生。

示例 2

输入

1,0,0,0,1

输出

1

解释

  • 只有第二个空座位(索引 2)可以坐下,因为左侧和右侧都为空。
  • 总共可以坐下 1 名学生。

复杂度分析

  1. 时间复杂度

    • 遍历数组一次,时间复杂度为 O(n),其中 n 是数组的长度。
  2. 空间复杂度

    • 除了输入数组外,只使用了常数级别的额外空间,空间复杂度为 O(1)

总结

  • C语言C++ 代码的逻辑一致,主要通过遍历数组检查每个空座位的左右是否为空,来计算可以坐下的学生数量。
  • C语言 使用静态数组和 scanf 处理输入,适合固定长度的场景。
  • C++ 使用动态数组和 cin 处理输入,适合动态长度的场景。
  • 如果有其他问题,欢迎继续提问!

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

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

相关文章

提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息

网络和IP地址计算器 https://www.sojson.com/convert/subnetmask.html提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息。 子网掩码转换 子网掩码 /26 的含义二进制表示:/26 表示前 26 位是网络部分&#xff0c;剩下的 6 位是主机部分。对应的子网掩码为 255…

IMX6U Qt 开发环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、交叉编译 1. 安装通用 ARM 交叉编译工具链 2. 安装 Poky 交叉编译工具链 二、编译出厂源码 1. U-boot 2. 内核和模块 3. 编译出厂 Qt GUI 综合 Demo 前言…

【2024年华为OD机试】(B卷,100分)- 找终点 (Java JS PythonC/C++)

一、问题描述 题目描述 给定一个正整数数组&#xff0c;设为 nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始&#xff0c;正好走到数组最后一个成员&#xff0c;所使用的最少步骤数。 要求&#xff1a; 第一步必须从第一元素开始&#xff0c;且 1<第一…

RabbitMQ-集群

RabbitMQ集群----主备关系&#xff0c;在运行的时候&#xff0c;如果非主要节点宕机&#xff0c;程序操作 不受影响&#xff1b; 如果主节点宕机了&#xff0c; 程序会中断操作。 而Rabbitmq集群&#xff0c;会马上让没有宕机的节点参选&#xff0c;选出新的主要节点。 程序重试…

postgresql分区表相关问题处理

1.使用pg_cron按日创建分区表&#xff0c;会出现所在数据库对应用户权限不足的问题。 原因是pg_cron运行在postgres数据库中&#xff0c;是用superuser进行执行的&#xff0c;对应的分区表的owner为postgres&#xff0c;所以需要单独授权对表的所有操作权限。不知道直接改变ow…

网络数据链路层以太网协议

网络数据链路层以太网协议 1. 以太网协议介绍 以太网是一个数据链路层协议&#xff0c;数据链路层的作用是用于两个设备&#xff08;同一种数据链路节点&#xff09;之间进行传递。 以太网不是一种具体的网络&#xff0c;而是一种网络技术标准&#xff0c;既包含了数据链路层…

Kotlin 循环语句详解

文章目录 循环类别for-in 循环区间整数区间示例1&#xff1a;正向遍历示例2&#xff1a;反向遍历 示例1&#xff1a;遍历数组示例2&#xff1a;遍历区间示例3&#xff1a;遍历字符串示例4&#xff1a;带索引遍历 while 循环示例&#xff1a;计算阶乘 do-while 循环示例&#xf…

【STM32】HAL库USB实现软件升级DFU的功能操作及配置

【STM32】HAL库USB实现软件升级DFU的功能操作及配置 文章目录 DFUHAL库的DFU配置修改代码添加条件判断和跳转代码段DFU烧录附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏…

使用WebdriverIO和Appium测试App

1.新建项目 打开Webstorm新建项目 打开终端输入命令 npm init -y npm install wdio/cli allure-commandline --save-dev npx wdio config 然后在终端依次选择如下&#xff1a; 然后在终端输入命令&#xff1a; npm install wdio/local-runnerlatest wdio/mocha-frameworkla…

uniapp小程序开发,配置开启小程序右上角三点的分享功能

直接全局配置一个分享的功能&#xff0c;要不然需要一个一个页面去单独配置就太麻烦了&#xff01;&#xff01;&#xff01; 1.新建一个share.js文件&#xff0c;并配置代码&#xff0c;调用onShareMessage()和onShareTimeline()两个函数。 其中&#xff1a; title&#xff1…

行业案例:高德服务单元化方案和架构实践

目录 为什么要做单元化 高德单元化的特点 高德单元化实践 服务单元化架构 就近接入实现方案 路由表设计 路由计算 服务端数据驱动的单元化场景 总结 系列阅读 为什么要做单元化 单机房资源瓶颈 随着业务体量和服务用户群体的增长,单机房或同城双机房无法支持服…

ip属地什么条件会改变?多角度深入探讨

IP属地&#xff0c;即IP地址的归属地&#xff0c;是互联网上设备连接时的一个关键信息&#xff0c;它通常反映了设备连接互联网时的地理位置。随着社交软件及各大平台推出IP归属地显示功能&#xff0c;IP属地的变化问题逐渐受到广大用户的关注。那么&#xff0c;IP属地在什么条…

【干货】交换网络环路介绍

定义 以太网交换网络中为了提高网络可靠性&#xff0c;通常会采用冗余设备和冗余链路&#xff0c;然而现网中由于组网调整、配置修改、升级割接等原因&#xff0c;经常会造成数据或协议报文环形转发&#xff0c;不可避免的形成环路。如图7-1所示&#xff0c;三台设备两两相连就…

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下&#xff0c;网络已然成为我们生活、工作与娱乐不可或缺的基础设施&#xff0c;如同空气般&#xff0c;无孔不入地渗透到各个角落。对于 Linux 系统的用户而言&#xff0c;网络丢包问题却宛如挥之不去的 “噩梦”&#xff0c;频繁…

Springboot内置Apache Tomcat 安全漏洞(CVE-2024-50379)

背景 大家都知道我们使用Springboot开发后&#xff0c;无需再额外配置tomcat&#xff0c;因为Springboot已经帮我们内置好了tomcat。 这次在线上安全团队就扫出来了我们Springboot服务的tomcat漏洞&#xff1a; 可以看到这是2023年的洞&#xff0c;Apache Tomcat 安全漏洞(…

杭州铭师堂的云原生升级实践

作者&#xff1a;升学e网通研发部基建团队 公司介绍 杭州铭师堂&#xff0c;是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育&#xff0c;让中国人都有好书读”的使命&#xff0c;致力于用“互联网教育”的科技手段让更多的孩子都能享有优…

qml XmlListModel详解

1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源&#xff0c;比如ListView、GridView、PathView等&#xff1b;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色&#xff0c;如name、age和height&#xff0c;并…

《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》

哈喽&#xff0c;大家好&#xff01;在平常开发过程中会遇到许多意想不到的坑&#xff0c;本篇文章就记录在开发过程中遇到一些常见的问题&#xff0c;看了许多博主的异步编程&#xff0c;我只能说一言难尽。本文详细的讲解了异步编程之美&#xff0c;是不可多得的好文&#xf…

《机器学习》之K-means聚类

目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…

MVC执行流程

&#xff08;1&#xff09;用户通过浏览器&#xff08;客户端&#xff09;向服务端&#xff08;后端&#xff09;发送请求&#xff0c;请求会被前端控制器DispatcherServlet拦截。 &#xff08;2&#xff09;DispatcherServlet拦截到请求后&#xff0c;会调用处理器映射器&…