华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

大众对垃圾短信深恶痛绝,希望能对垃圾短信发送者进行识别,为此,很多软件增加 了垃圾短信识别机制。经分析,发现正常用户的短信通常具备交互性,而垃圾短信往 往都是大量单向的短信,按照如下规则进行垃圾短信识别:

本题中,发送者A符合以下条件之一的,则认为A是垃圾短信发送者:

① A 发送短信的接收者中,没有发过短信给A的人数 L > 5;
② A 发送的短信数 - A接收的短信数 M > 10;
③ 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5。

二、输入描述

第一行为条目数目,接下来几行是具体的条目,每个条目,是一对ID,第一个数字是发送者ID,后面的数字是接收者ID,中间空格隔开,所有的ID都为无符号整型,ID最大值为100;

同一个条目中,两个ID不会相同(即不会自己给自己发消息);

最后一行为指定的ID。

三、输出描述

输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值(由于N值不唯一,不需要输出);
输出均为宇符串。

1、输入

8
1 2
1 3
1 4
1 5
1 6
6 1
5 2
6 3
1

2、输出

false 4 1

3、说明

  1. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值;
  2. 没有发过短信给A的人数L,A接收的短信数 M。

没有发过短信给A的人数L为4,A接收的短信数 M为1。

四、解题思路

此题还是很简单的,根据题意解析即可。

  1. 定义没有发过短信给A的人数L、A接收的短信数 M、A 发送给 X 的短信数X、A 接收到X的短信数N;
  2. 遍历A发送的短信关系aToList;
  3. 获取接收A短信的用户的短信发送信息;
  4. 如果未给A发送,则没有发过短信给A的人数L++;
  5. 否则A接收的短信数 M++;
  6. 获取A 发送给 X 的短信数X、A 接收到X的短信数N;
  7. 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5,则视为垃圾短信发送者,输出true,不再计算N值;
  8. 根据①、②、③判断条件,判断是否为垃圾短信发送者,满足一个即为垃圾短信发送者:
    1. A 发送短信的接收者中,没有发过短信给A的人数 L > 5;
    2. A 发送的短信数 - A接收的短信数 M > 10;
    3. 如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5;
  9. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.valueOf(sc.nextLine());
    Map<Integer, List<Integer>> map = new HashMap<>();
    for (int i = 0; i < n; i++) {
        int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        List<Integer> list = map.getOrDefault(arr[0], new ArrayList<>());
        list.add(arr[1]);
        map.put(arr[0], list);
    }
    Integer A = Integer.valueOf(sc.nextLine());
    List<Integer> aToList = map.get(A);
    // 1. A 发送短信的接收者中,没有发过短信给A的人数 L > 5
    // 没有发过短信给A的人数
    int L = 0;
    // A接收的短信数 M
    int M = 0;
    // A 发送给 X 的短信数
    int X = 0;
    //  A 接收到X的短信数N
    int N = 0;
    // 3.如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5
    boolean flag = false;
    for (Integer num : aToList) {
        List<Integer> toAList = map.getOrDefault(num, new ArrayList<>());
        if (!toAList.contains(A)) {
            L++;
        } else {
            M++;

            // 3.如果存在 X,A 发送给 X 的短信数 - A 接收到X的短信数N > 5
            if(!flag){
                // A 发送给 X 的短信数
                X = Collections.frequency(aToList, num);
                //  A 接收到X的短信数N
                N = Collections.frequency(toAList, A);
                if(X - N > 5){
                    flag = true;
                }
            }
        }
    }

    // 2. A 发送的短信数 - A接收的短信数 M > 10
    // A 发送的短信数
    int aSend = aToList.size();

    // 没有发过短信给A的人数L,A接收的短信数 M
    StringBuilder builder = new StringBuilder();
    if (L > 5 || aSend - M > 10 || flag) {
        builder.append("true").append(" ").append(L).append(" ").append(M);
    }else{
        builder.append("false").append(" ").append(L).append(" ").append(M);
    }
    System.out.println(builder);
}

六、效果展示

1、输入

12
1 2
1 3
1 4
1 5
1 6
1 7
1 8
6 1
7 1
8 1
5 2
6 3
1

2、输出

false 4 3

3、说明

  1. 输出该ID是否为垃圾短信发送者(是输出 true,否则输出 false),并且按序列输出L、M的值;
  2. 没有发过短信给A的人数L,A接收的短信数 M。

没有发过短信给A的人数L为4,A接收的短信数 M为3。

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择短信群发平台要小心陷阱

你知道短信群发平台也有陷阱吗&#xff1f;选择短信群发平台很重要&#xff0c;今天小编就为您介绍短信群发平台有哪些陷阱&#xff1f; 这几点你要注意了&#xff1a; 1、扣量&#xff0c;有些不靠谱的短信群发平台开始以低价诱惑“客户”&#xff0c;但是发送过程中就暗中扣…

【前端寻宝之路】学习和使用CSS的所有选择器

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-blSAMs8NTfBKaPl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

前端网页如何在 Windows 上测试 Safari

“Windows上的Safari&#xff1f;”&#xff0c;“那不可能&#xff01; Safari 无法在 Windows 上运行。当然的&#xff01; 曾经可以在windows上运行&#xff0c;但苹果早在 2012 年就停止支持 Windows。对于想要测试 Safari 兼容性的 Web 开发人员来说&#xff0c;这真是太不…

ubuntu 23开机界面美化教程

效果 方法 GRUB开机界面美化 从上述网站中&#xff0c;查找GRUB Themes分类&#xff0c;并下载GRUB主题包&#xff08;tar.gz格式&#xff09;&#xff0c;如CyberSynchro.tar.gz&#xff1b; 解压下载得到的压缩包&#xff0c;得到CyberSynchro&#xff1b; 将CyberSynchro…

connection SQLException, url:jdbc ,errorCode 0, state 08S01

connection SQLException, url: jdbc:mysql://localhost:3306/itcast_health?useUnicodetrue&characterEncodingutf-8, errorCode 0, state 08S01 添加&#xff1a;&useSSLfalse 添加前 添加后&#xff1a; 查询数据库正常

2.1 关系数据结构及形式化定义 数据库概论

目录 2.1.1 关系 关系&#xff1a;概念 1. 域&#xff08;Domain&#xff09; 2.笛卡尔积 元组&#xff08;Tuple&#xff09; 分量&#xff08;Component&#xff09; 基数&#xff08;Cardinal number&#xff09; 3. 关系 候选码&#xff08;Candidate key&#xf…

解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题

出自 BV1MN411y7pw&#xff0c; P98 黑马AJAX-Node.js-Webpack教学视频中webpack部分&#xff0c;打包的时候出错 ERROR in main Module not found: Error: Cant resolve ./src in V:\Web\mycode\webpack\01_webpack_use resolve ./src in V:\Web\mycode\webpack\01_webpack_us…

【2024金三银四】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【C++干货基地】面向对象核心概念与实践原理:拷贝构造函数的全面解读

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

ReorderData - 优化阅读笔记

主要实现文件: bolt/lib/Passes/ReorderData.cpp 支持 X86/Arm 测试用例&#xff1a; bolt/test/reorder-data-writable-ptload.c int a1,a2,a3,a4; // 待补充默认关闭&#xff0c;开启选项&#xff1a; # 指定要重排的数据段 --reorder-data<section1,section2,section3…

基于JavaWeb开发的springboot网咖管理系统[附源码]

基于JavaWeb开发的springboot网咖管理系统[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &a…

Android14音频进阶:生产者与消费者模型(六十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

力扣每日一题 将标题首字母大写 模拟 String API

Problem: 2129. 将标题首字母大写 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神题解 复杂度 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public String capitalizeTitle(String title)…

数据结构:栈的创建与使用

今天我们一起来看一种新的数据结构栈&#xff0c;其实这一种结构我们在之前就已经使用过&#xff0c;只是今天我们来强调以下几点&#xff1a; 1、栈是一种数据后进先出的结构 &#xff0c;通过入栈1 2 3 4我们可以得到多种结果 2、我们选用顺序表来实现栈结构&#xff0c;这里…

科技回顾,飞凌嵌入式受邀亮相第八届瑞芯微开发者大会「RKDC2024」

2024年3月7日~8日&#xff0c;第八届瑞芯微开发者大会&#xff08;RKDC2024&#xff09;在福州举行&#xff0c;本届大会以“AI芯片AI应用AloT”为主题&#xff0c;邀请各行业的开发者共启数智化未来。 本届大会亮点颇多&#xff0c;不仅有13大芯片应用展示、9场产品和技术论坛…

软考高级:设计模式分类(创建型、结构型、行为型)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Linux之防火墙详解

华子目录 什么时防火墙分类Netfilter&#xff08;数据包过滤&#xff09;定义Netfilter分析内容 防火墙无法完成的任务iptables与firewalld区别iptablesiptables执行原则原则防火墙规则规则链概念分析规则链分类注意例&#xff1a;物业管理公司有两条规定&#xff1a; 规则链之…

作用域链的理解(超级详细)

文章目录 一、作用域全局作用域函数作用域块级作用域 二、词法作用域三、作用域链 一、作用域 作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

C++14之std::index_sequence和std::make_index_sequence

相关文章系列 std::apply源码分析 C之std::tuple(一) : 使用精讲(全) 目录 1.std::integer_sequence 2.std::index_sequence 3.std::make_index_sequence 4.运用 4.1.打印序列的值 4.2.编译时求值 4.3.std::tuple访问值 5.总结 1.std::integer_sequence 运行时定义一个…