华为OD机试真题——考勤信息(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

news2025/5/20 10:33:38

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《考勤信息》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO

更多内容


题目名称:考勤信息


  • 知识点:字符串处理、滑动窗口、逻辑判断
  • 时间限制:1秒
  • 空间限制:256MB
  • 限定语言:不限

题目描述

公司用一个字符串来表示员工的出勤信息,包含以下四种标记:

  • absent:缺勤
  • late:迟到
  • leaveearly:早退
  • present:正常上班

出勤奖判定条件

  1. 缺勤不超过一次
  2. 没有连续的迟到/早退(即相邻记录不能同时为lateleaveearly);
  3. 任意连续7次考勤中,缺勤/迟到/早退的总次数不超过3次

输入描述

  • 第一行为记录条数NN >= 1);
  • 后续N行为考勤记录字符串(长度 < 10000,无非法输入)。
    示例:
2  
present  
present absent present present leaveearly present absent  

输出描述
对每组考勤记录,输出true(可获奖)或false(不可获奖),结果用空格分隔。
示例输出:

true false  

Java

问题分析

题目要求根据员工的考勤记录判断其是否符合获得出勤奖的条件。需满足以下三个条件:

  1. 缺勤不超过一次
  2. 没有连续的迟到或早退
  3. 任意连续7次考勤中,违规次数(缺勤/迟到/早退)不超过3次

解题思路

  1. 条件一:遍历所有记录,统计缺勤次数。若超过1次,直接返回false
  2. 条件二:遍历相邻记录,若相邻两个记录均属于迟到或早退,返回false
  3. 条件三:若记录数≥7,使用滑动窗口检查每个连续7次考勤的违规次数。若任何窗口超过3次,返回false

代码实现

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int N = Integer.parseInt(scanner.nextLine());  // 读取测试用例数
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < N; i++) {
   
            int n = Integer.parseInt(scanner.nextLine());  // 读取当前用例的记录数
            String[] records = new String[n];
            for (int j = 0; j < n; j++) {
   
                records[j] = scanner.nextLine().trim();  // 读取每条记录
            }
            result.append(checkAttendance(records) ? "true " : "false ");
        }
        System.out.println(result.toString().trim());
        scanner.close();
    }

    private static boolean checkAttendance(String[] records) {
   
        int n = records.length;
        int absentCount = 0;
        int[] violations = new int[n];  // 标记是否为违规记录(absent/late/leaveearly)

        // 检查条件1和条件2,并构建violations数组
        for (int i = 0; i < n; i++) {
   
            String record = records[i];
            // 条件1:统计缺勤次数
            if (record.equals("absent")) {
   
                absentCount++;
                if (absentCount > 1) return false;
            }
            // 构建violations数组(1表示违规)
            violations[i] = (record.equals("absent") || record.equals("late") || record.equals("leaveearly")) ? 1 : 0;
            // 条件2:检查相邻记录是否均为迟到/早退
            if (i > 0) {
   
                String prev = records[i - 1];
                boolean prevViolate = prev.equals("late") || prev.equals("leaveearly");
                boolean currViolate = record.equals("late") || record.equals("leaveearly");
                if (prevViolate && currViolate) return false;
            }
        }

        // 条件3:滑动窗口检查连续7次考勤
        if (n >= 7) {
   
            int windowSum = 0;
            // 初始化第一个窗口(前7个记录)
            for (int j = 0; j < 7; j++) {
   
                windowSum += violations[j];
            }
            if (windowSum > 3) return false;
            // 滑动窗口,每次移动一步
            for (int j = 7; j < n; j++) {
   
                windowSum += violations[j] - violations[j - 7];
                if (windowSum > 3) return false;
            }
        }
        return true;
    }
}

代码解析

  1. 输入处理

    • scanner.nextLine()读取输入,处理多个测试用例。
    • records数组存储每个用户的考勤记录。
  2. 条件一检查

    • 统计absent次数,超过1次直接返回false
  3. 条件二检查

    • 遍历相邻记录,若当前和前一个记录均属于迟到/早退,返回false
  4. 条件三检查

    • 构建violations数组,标记违规记录。
    • 使用滑动窗口计算每个连续7次考勤的违规次数总和。
    • 若任何窗口总和超过3,返回false

示例测试

  1. 示例输入1
    输入:

    2  
    present  
    present absent present present leaveearly present absent  
    

    输出:true false
    解释

    • 第一个用例无缺勤且满足所有条件。
    • 第二个用例缺勤两次,违反条件一。
  2. 测试用例2
    输入:

    1  
    late leaveearly  
    

    输出:false
    解释:相邻记录均为迟到/早退,违反条件二。

  3. 测试用例3
    输入:

    7  
    absent late late present present present present  
    

    输出:false
    解释:连续7次考勤中违规次数为3(absent + 2次late),满足条件三。


综合分析

  1. 时间复杂度

    • O(N),其中N为记录数。每个记录仅遍历两次(条件检查+滑动窗口)。
  2. 空间复杂度

    • O(N),存储考勤记录和违规标记数组。
  3. 正确性

    • 严格按题意分步骤检查三个条件,确保逻辑正确。
  4. 优势

    • 高效性:滑动窗口将条件三的时间复杂度优化为O(N)。
    • 可读性:代码结构清晰,条件处理明确。
  5. 适用性

    • 完全支持题目约束(记录数≤1e5),满足时间和空间要求。

python

问题分析

题目要求判断员工的考勤记录是否符合出勤奖条件,需满足以下三个条件:

  1. 缺勤不超过一次absent次数 ≤ 1);
  2. 无连续迟到/早退(相邻记录不能同为 lateleaveearly);
  3. 任意连续7次考勤中违规次数(缺勤、迟到、早退)不超过3次

解题思路

  1. 条件一:统计所有记录中 absent 的次数,若超过1次直接判定失败。
  2. 条件二:遍历相邻记录,检查是否存在连续的 lateleaveearly
  3. 条件三:使用滑动窗口检查所有长度为7的连续窗口,统计违规次数是否超过3次。

代码实现

import sys

def check_attendance(records):
    # 条件一:缺勤次数不超过1次
    absent_count = records.count('absent')
    if absent_count > 1:
        return False
    
    # 条件二:检查相邻记录是否均为迟到/早退
    for i in range(

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

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

相关文章

Go语言测试用例的执行与分析

在软件开发过程中&#xff0c;测试用例是确保代码质量的关键环节。Go语言作为一种现代的编程语言&#xff0c;它内置了强大的测试框架&#xff0c;可以帮助开发者轻松编写和执行测试用例。本文将介绍如何在 Go 语言中编写、执行测试用例&#xff0c;并对测试结果进行分析。 ## …

MyBatis:动态SQL

文章目录 动态SQLif标签trim标签where标签set标签foreach标签include标签和sql标签 Mybatis动态SQL的官方文档&#xff1a; https://mybatis.net.cn/dynamic-sql.html 动态SQL 动态SQL是 MyBatis的强大特性之一,如果是使用JDBC根据不同条件拼接sql很麻烦&#xff0c;例如拼接…

游戏引擎学习第280天:精简化的流式实体sim

回顾并为今天的内容做铺垫 今天的任务是让之前关于实体存储方式的改动真正运行起来。我们现在希望让实体系统变得更加真实和实用&#xff0c;能够支撑我们游戏实际所需的功能。这就要求我们对它进行更合理的实现和调试。 昨天我们基本让代码编译通过了&#xff0c;但实际上还…

王树森推荐系统公开课 排序03:预估分数融合

融合预估分数 p c l i c k ⋅ p l i k e p_{click} \cdot p_{like} pclick​⋅plike​ 有实际意义&#xff0c;等于在曝光中点赞的概率。 p c l i c k ⋅ p c o l l e c t p_{click} \cdot p_{collect} pclick​⋅pcollect​ 同理。 按多种排名做 ensemble sort。 某电商的融…

网络I/O学习-poll(三)

一、为什么要用Poll 由于select参数太多&#xff0c;较于复杂&#xff0c;调用起来较为麻烦&#xff1b;poll对其进行了优化 二、poll机制 poll也是一个系统调用&#xff0c;每次调用都会将所有客户端的fd拷贝到内核空间&#xff0c;然后进行轮询&#xff0c;判断IO是否就绪…

k8s(12) — 版本控制和滚动更新(金丝雀部署理念)

金丝雀部署简介&#xff1a; 1、基本概念 金丝雀部署是一种软件开发中的渐进式发布策略&#xff0c;其核心思想是通过将新版本应用逐步发布给一小部分用户&#xff08;即 “金丝雀” 用户&#xff09;&#xff0c;在真实环境中验证功能稳定性和性能表现&#xff0c;再逐步扩大发…

Google设置app-ads.txt

问题&#xff1a; 应用上架后admob后台显示应用广告投放量受限&#xff0c;需要设置app-ads.txt才行。 如何解决&#xff1a; 官方教程: 看了下感觉不难&#xff0c;创建一个txt&#xff0c;将第二条的代码复制进行就得到app-ads.txt了。 然后就是要把这个txt放到哪才可以…

docker安装rockerMQ

参考Docker部署RocketMQ5.x (单机部署配置参数详解不使用docker-compose直接部署)_rocketmq不推荐用docker部署-CSDN博客 镜像拉取 镜像地址&#xff1a; https://hub.docker.com/r/apache/rocketmq/tags 我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本&a…

交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1-3]、连续文献】

我们在写论文时&#xff0c;需要插入大量参考文献。 有时&#xff0c;一句话需要引用多个文献&#xff0c;如&#xff1a;[1-3]或者[1,3,4]这种形式多个文献插入、跨文献插入。 在上一篇文章中&#xff0c;我们提到可以直接打“-”或者“&#xff0c;”&#xff0c;但是word导出…

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞&#xff1a;ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析&#xff1a;施耐德PLC与AB PLC的互联互通 在现代工业自动化中&#xff0c;设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关&#xff0c;将施耐德P…

缺乏团队建设活动,如何增强凝聚力?

当一个团队缺乏系统性的建设活动时&#xff0c;成员之间容易产生疏离感、误解与信任缺失&#xff0c;最终影响整体执行力和目标达成。要有效增强团队凝聚力&#xff0c;应从设计高参与感的团队活动、结合业务与人文目标、营造持续共创的文化机制、推动跨层级协作互动等层面着手…

力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素

这道题直接用最笨的办法来做的&#xff0c;用递归来做&#xff0c;我们定义一个全局变量vector<int> element&#xff0c;然后使用中序遍历&#xff0c;每当碰到一个非空节点就将其加入到向量中&#xff0c;这样依赖当向量中的元素小于k时&#xff0c;就返回0&#xff0c…

Linux面试题集合(5)

把文件1的内容追加到文件2 cat 文件1>>文件2 把文件1和文件2合并成文件3 cat 文件1 文件2>文件3 使用less查看文件时&#xff0c;搜寻ab字符 /ab 用more和less如何查看文件 more&#xff1a; CtrlF -- 向下滚动一屏 CtrlB -- 返回上一屏 f -- 向下翻屏 b -- 向上翻屏 …

python动漫论坛管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

Web 技术与 Nginx 网站环境部署

这里写目录标题 一. Web基础域名和DNS域名的概念域名的结构域名结构类型 Hosts文件Hosts文件的作用修改Hosts文件 DNS域名注册 网页与HTML网页概述HTML概述HTML基本标签HTML语法规则HTML文件结构 网站和主页Web1.0 与 Web2.0 静态网页与动态网页静态网页动态网页动态网页语言 H…

FP8精度革命:Hopper架构下大模型训练的误差传播控制方法

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 一、FP8为何成为大模型训练的新范式&#xff1f; 1.1 算力需求与精度演进的矛盾 当前大语言…

手动制做一个Transformer

本文来自I made a transformer by hand . 一直以来&#xff0c;笔者对 transformer 的注意力机制、qkv的理解都浮于表面&#xff0c;当然也不是说我看完 I made a transformer by hand 后理解有多深入&#xff0c;但确实加深了我对相关概念的理解&#xff0c;故搬运此文章&…

已解决——如何让网站实现HTTPS访问?

一、申请SSL证书 SSL证书是HTTPS实现的关键&#xff0c;它由受信任的证书颁发机构&#xff08;CA&#xff09;签发&#xff0c;用于验证网站的身份并加密数据传输。以下是申请SSL证书的常见步骤&#xff1a; 选择证书类型 根据网站的需求和预算&#xff0c;选择合适的SSL证书…

WebRTC技术EasyRTC嵌入式音视频通信SDK助力智能电视搭建沉浸式实时音视频交互

一、方案概述​ EasyRTC是一款基于WebRTC技术的开源实时音视频通信解决方案&#xff0c;具备低延迟、高画质、跨平台等优势。将EasyRTC功能应用于智能电视&#xff0c;能够为用户带来全新的交互体验&#xff0c;满足智能电视在家庭娱乐、远程教育、远程办公、远程医疗等多种场…

小乌龟git中的推送账户、作者账户信息修改

文章目录 修改git文档作者信息修改git推送用户信息参考文献 修改git文档作者信息 小乌龟中的用户信息为&#xff1a;作者信息&#xff0c;并非推送用户。 上边用户信息&#xff0c;修改的是文件的作者信息。如果想要修改git服务中记录的推送用户信息需要修改推送用户信息。 …