华为OD机试 - 优雅子数组 - 暴力枚举(Python/JS/C/C++ 2024 E卷 100分)

news2024/11/25 6:45:49

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

如果一个数组中出现次数最多的元素出现大于等于 K 次,称为 k 优雅数组,k 可以被称为优雅阈值。

例如,数组 [2, 3, 1, 2, 3, 1, 2, 3, 1],它是一个 3 优雅数组,因为元素 1 出现次数大于等于 3 次,数组 [2, 3, 1, 2, 3, 1] 不是一个 3 优雅数组,因为其中出现次数最多的元素是 1 和 2,只出现了 2 次。

给定一个数组 A 和 k 值, 请求出 A 有多少子数组是 k-优雅子数组。

子数组是数组中一个或多个连续元素组成的数组。

例如,数组 [1, 2, 3, 4] 包含 10 个子数组,分别是:

[1],[1, 2],[1, 2, 3],[1, 2, 3, 4],[2],[2, 3],[2, 3, 4],[3],[3, 4],[4]。

二、输入描述

第一行输入两个整数,用空格隔开,含义是:A 数组长度和 k 值

第二行输入 A 数组元素,以空格隔开

三、输出描述

输出 A 有多少子数组是 k-优雅子数组

四、测试用例

测试用例1:

1、输入

7 3
1 2 3 1 2 3 1

2、输出

1

3、说明

只有整个数组 [1,2,3,1,2,3,1] 中元素 1 出现了3次。

测试用例2:

1、输入

7 2
1 2 3 1 2 3 1

2、输出

10

3、说明

共有10个子数组中至少有一个元素出现了2次或更多。

五、解题思路

  1. 读取数组长度n和优雅阈值k
  2. 初始化结果计数器,用于统计k-优雅子数组的数量
  3. 遍历所有可能的子数组起始点
  4. 使用HashMap记录当前子数组中每个元素的出现次数
  5. 遍历所有可能的子数组终止点
    • 更新当前元素的出现次数
    • 更新最大出现次数
    • 如果最大出现次数达到或超过k,计数器加一
  6. 输出结果

六、Python算法源码

# 导入所需的库
from collections import defaultdict
import sys

def main():
    # 读取所有输入
    input = sys.stdin.read().split()
    idx = 0
    
    # 读取数组长度n和优雅阈值k
    n = int(input[idx])
    k = int(input[idx + 1])
    idx += 2
    
    # 读取数组A的元素
    A = list(map(int, input[idx:idx + n]))
    idx += n
    
    # 初始化结果计数器,用于统计k-优雅子数组的数量
    result = 0
    
    # 遍历所有可能的子数组起始点
    for start in range(n):
        # 使用字典记录当前子数组中每个元素的出现次数
        freq_map = defaultdict(int)
        # 记录当前子数组中元素的最大出现次数
        max_freq = 0
        
        # 遍历所有可能的子数组终止点
        for end in range(start, n):
            current = A[end]
            # 更新当前元素的出现次数
            freq_map[current] += 1
            # 更新最大出现次数
            if freq_map[current] > max_freq:
                max_freq = freq_map[current]
            
            # 如果最大出现次数达到或超过k,计数器加一
            if max_freq >= k:
                result += 1
    
    # 输出结果
    print(result)

if __name__ == "__main__":
    main()

七、JavaScript算法源码

// 使用 Node.js 的 readline 模块读取输入
const readline = require('readline');

// 创建接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

let input = [];
let n = 0;
let k = 0;
let A = [];

// 监听每一行输入
rl.on('line', function(line){
    input.push(line);
}).on('close', function(){
    // 读取数组长度n和优雅阈值k
    let firstLine = input[0].trim().split(' ');
    n = parseInt(firstLine[0]);
    k = parseInt(firstLine[1]);

    // 读取数组A的元素
    A = input[1].trim().split(' ').map(Number);

    // 初始化结果计数器
    let result = 0;

    // 遍历所有可能的子数组起始点
    for(let start = 0; start < n; start++) {
        // 使用对象记录当前子数组中每个元素的出现次数
        let freqMap = {};
        // 记录当前子数组中元素的最大出现次数
        let maxFreq = 0;

        // 遍历所有可能的子数组终止点
        for(let end = start; end < n; end++) {
            let current = A[end];
            // 更新当前元素的出现次数
            if(freqMap[current] === undefined){
                freqMap[current] = 1;
            }
            else{
                freqMap[current] += 1;
            }
            // 更新最大出现次数
            if(freqMap[current] > maxFreq){
                maxFreq = freqMap[current];
            }

            // 如果最大出现次数达到或超过k,计数器加一
            if(maxFreq >= k){
                result += 1;
            }
        }
    }

    // 输出结果
    console.log(result);
});

八、C算法源码

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

// 定义队列节点结构体
typedef struct Node {
    int num; // 客户编号
    struct Node* next; // 指向下一个节点
} Node;

// 定义队列结构体
typedef struct Queue {
    Node* front; // 队首
    Node* rear;  // 队尾
} Queue;

// 初始化队列
void initQueue(Queue* q){
    q->front = q->rear = NULL;
}

// 判断队列是否为空
int isEmpty(Queue* q){
    return q->front == NULL;
}

// 入队操作
void enqueue(Queue* q, int num){
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->num = num;
    newNode->next = NULL;
    if(isEmpty(q)){
        q->front = q->rear = newNode;
    }
    else{
        q->rear->next = newNode;
        q->rear = newNode;
    }
}

// 出队操作,返回客户编号
int dequeue(Queue* q){
    if(isEmpty(q)){
        return -1; // 表示队列为空
    }
    Node* temp = q->front;
    int num = temp->num;
    q->front = q->front->next;
    if(q->front == NULL){
        q->rear = NULL;
    }
    free(temp);
    return num;
}

int main(){
    int n, k;
    // 读取数组长度n和优雅阈值k
    scanf("%d %d", &n, &k);
    
    // 读取数组A的元素
    int* A = (int*)malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", &A[i]);
    }
    
    // 初始化结果计数器
    int result = 0;
    
    // 遍历所有可能的子数组起始点
    for(int start = 0; start < n; start++){
        // 使用动态数组记录元素频率
        int freq[100001] = {0}; // 假设元素范围为1到100000
        int maxFreq = 0;
        
        // 遍历所有可能的子数组终止点
        for(int end = start; end < n; end++){
            int current = A[end];
            freq[current]++;
            if(freq[current] > maxFreq){
                maxFreq = freq[current];
            }
            
            // 如果最大出现次数达到或超过k,计数器加一
            if(maxFreq >= k){
                result++;
            }
        }
    }
    
    // 输出结果
    printf("%d\n", result);
    
    // 释放内存
    free(A);
    
    return 0;
}

九、C++算法源码

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    int n, k;
    // 读取数组长度n和优雅阈值k
    cin >> n >> k;
    
    // 读取数组A的元素
    vector<int> A(n);
    for(int i = 0; i < n; i++) {
        cin >> A[i];
    }
    
    // 初始化结果计数器
    int result = 0;
    
    // 遍历所有可能的子数组起始点
    for(int start = 0; start < n; start++){
        // 使用unordered_map记录当前子数组中每个元素的出现次数
        unordered_map<int, int> freqMap;
        // 记录当前子数组中元素的最大出现次数
        int maxFreq = 0;
        
        // 遍历所有可能的子数组终止点
        for(int end = start; end < n; end++){
            int current = A[end];
            // 更新当前元素的出现次数
            freqMap[current]++;
            // 更新最大出现次数
            if(freqMap[current] > maxFreq){
                maxFreq = freqMap[current];
            }
            
            // 如果最大出现次数达到或超过k,计数器加一
            if(maxFreq >= k){
                result++;
            }
        }
    }
    
    // 输出结果
    cout << result << "\n";
    
    return 0;
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

哦豁!有了这份学习路径,AI小白也能学懂大模型!!

小白如何规划大模型学习路径&#xff1f;&#xff1f; 元仔有求必应&#xff0c;为各位同学整理出一份完整的大模型学习路径规划&#xff01; 初识大模型&#xff1a;概念与趋势 首先&#xff0c;AI小白应从基础出发&#xff0c;理解什么是大模型。 大模型&#xff0c;顾名…

LeetCode讲解篇之98. 验证二叉搜索树

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以通过递归搜索的方式查询某棵树是不是二叉搜索树&#xff0c;二叉搜索树需要满足的最小值与最大值的约束并且左子树和右子树都是二叉搜索树或者当前节点为空&#xff0c;以当前节点为根节点的树才是二叉搜…

WPF中的布局

布局原则 1、不显式设置元素大小。 2、不使用绝对定位。 元素应该根据容器的内容来进行排列。绝对定位在开发前期会带来一些便捷&#xff0c;但扩展性比较差。一旦显示器尺寸或分辨率发生改变&#xff0c;界面的显示效果可能会达不到预期的效果。 3、布局容器可以嵌套使用 常…

Django 5 用后台admin 做一个简单 DIY 电脑组装报价系统

1. 注意点 合计价格 admin.register(ComputerConfiguration) class ComputerConfigurationAdmin(admin.ModelAdmin):inlines [ConfigurationComponentInline]list_display (config_id, user_id, config_name, total_price, total_jh_price, total_selling_price)list_display…

碰撞检测 | 图解视线生成Bresenham算法(附ROS C++/Python/Matlab实现)

目录 0 专栏介绍1 Bresenham算法介绍2 图解Bresenham算法3 算法流程4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xff…

HarmonyOS Next元服务开发快速入门案例

项目代码gitee地址&#xff1a; (HarmonyOS Next 元服务开发快速入门: HarmonyOS Next 元服务开发快速入门 - Gitee.com) 开源协议使用&#xff1a;Apache License 2.0 &#xff0c;代码包支持免费使用&#xff0c;可进行二次开发后选择开源或闭源。 一、创建项目 1.创建项目&…

大学生社团活动系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;社长管理&#xff0c;社团分类管理&#xff0c;社团信息管理&#xff0c;社团加入管理&#xff0c;社团活动管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页…

基于SpringBoot vue3 的山西文旅网java网页设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

项目完整开发的流程

流程 1.设计产品 2.写需求文档 2.1需求分析&#xff0c;后端设计数据库&#xff0c;建表&#xff0c;客户沟通&#xff0c;说完签字&#xff0c;留证据&#xff0c;防止后面扯皮&#xff0c;和防止后续变需求重新写业务 3.画原型图&#xff0c;也就是草图&#xff0c;初始的…

LeetCode讲解篇之2466. 统计构造好字符串的方案数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 组成长度为i的字符串个数 组成长度为i - zero的字符串个数 组成长度为i - one的字符串个数 设数组f中i号元素的值为组成长度为i的字符串个数 则状态转移方程为f[i] f[i - zero] f[i - one]&#xff0c;其中需…

【unity进阶知识10】从零手搓一个UI管理器/UI框架,自带一个提示界面,还有自带DOTween动画效果

最终效果 文章目录 最终效果前言UI管理器1、新增UI面板层枚举2、初始化2.1、用代码创建画布2.2、用代码创建UI面板的父物体层2.3、代码添加EventSystem物体 3、ShowPanel显示面板方法4、HidePanel隐藏面板的方法5、CloseUI关闭界面的方法6、UI界面基类 测试调用优化绑定按钮事件…

C语言初步介绍(初学者,大学生)【上】

1.C语⾔是什么&#xff1f; ⼈和⼈交流使⽤的是⾃然语⾔&#xff0c;如&#xff1a;汉语、英语、⽇语 那⼈和计算机是怎么交流的呢&#xff1f;使⽤ 计算机语⾔ 。 ⽬前已知已经有上千种计算机语⾔&#xff0c;⼈们是通过计算机语⾔写的程序&#xff0c;给计算机下达指令&am…

【AIGC产品经理】面试7家,拿到2个offer,薪资中上水平

Hello&#xff0c;大家好&#xff0c;我是一名不知名的5年B端金融产品经验的产品经理&#xff0c;成功转行AI产品经理&#xff0c;前期面试了北京百度、阿里、理想汽车、百川智能、华为、OPPO等多家大厂面试&#xff0c;但是由于已定居成都&#xff0c;主动终止了后续需要线下的…

ubuntu 系统安装

使用VMware虚拟机上进行实现 官网下载地址&#xff1a; https://cn.ubuntu.com/download https://releases.ubuntu.com 操作系统手册&#xff1a; https://ubuntu.com/server/docs/ &#xff08;里面包含安装文档&#xff09; 安装指南&#xff08;详细&#xff09;&#xff1a…

一手信息:用ai怎么做短视频赚钱。

AI制作短视频赚钱的具体数据与分析如下&#xff1a; 数据展示 ​ 更多实操教程和AI绘画工具,可以扫描下方,免费获取 \1. 收入情况&#xff1a; - 有案例显示&#xff0c;通过AI生成历史解说视频&#xff0c;半年内可以赚取64万人民币。 - 另一个案例则是通过AI生成电影解说…

鸿蒙 Next 实战: 环境搭建

前言 作为独立开发者&#xff0c;如果我们错过了传统移动 App&#xff0c;和后起小程序的红利&#xff0c;那万物互联 AI 的应用开发就得抓住了。 虽然个人上架应用平台难易都差不多&#xff0c;但是鸿蒙生态当前正需要广大开发者参与&#xff0c;一旦上架&#xff0c;相比其…

AI绘画ComfyUI 完全入门:基本功能完全掌握!

前言 大家好&#xff0c;我是每天分享AI应用的萤火君&#xff01; 在AI绘画领域&#xff0c;Stable Diffusion 因其开源特性而受到广泛的关注和支持&#xff0c;背后聚拢了一大批的应用开发者和艺术创作者&#xff0c;是AI绘画领域当之无愧的王者。 目前使用 Stable Diffusi…

外国钞票面值检测系统源码分享

外国钞票面值检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

新版AndroidStudio log使用

从Android Studio Dophin开始&#xff0c;Android Studio中的默认展示了新版的logcat。新版的logcat色彩上是更加的好看了&#xff0c;不同的tag会有不同的颜色&#xff0c;不同level等级的log默认也有不同的颜色。log过滤修改的更简洁了&#xff0c;当然使用起来也更加复杂了。…

系统开发基础错题解析一【软考】

目录 前言1.开发模型1.1快速原型模型优点1.2敏捷统一模型1.3增量模型的优缺点1.4极限编程1.5螺旋模型 2.软件开发方法3.数据流图与数据字典3.1判定表3.2数据流图绘制3.3决策树 4.概要设计和详细设计5.内聚性6.耦合性 前言 本文专门用来记录本人在做软考中有关系统开发基础的错…