当前位置: 首页 > article >正文

统计班级中的说谎者(字节青训)

题目

班里有 N 个学生,第 i 个学生的分数是 A_i。当且仅当分数 <= A_i 的学生数量多于分数比他高的数量时,第 i 个学生会说谎。求出有多少学生会说谎。

输入格式

  • 输入 N 学生的成绩,包含 A_1, A_2, ..., A_N

输出格式

对于每组数据,输出有多少学生会说谎。

数据范围

  • 1≤N≤1001≤N≤100

  • 0≤Ai≤1000≤Ai​≤100

输入

100 100 100

输出

3

输入

2 1 3

输出

2

demo

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>

int solution(std::vector<int> A) {
    int N = A.size();
    std::unordered_map<int, int> score_count;

    // 统计每个分数的出现次数
    for (int score : A) {
        score_count[score]++;
    }

    // 计算说谎的学生数量
    int liars = 0;
    int cumulative_count = 0; // 记录分数小于当前分数的学生数量

    // 获取所有分数并排序
    std::vector<int> unique_scores;
    for (const auto& pair : score_count) {
        unique_scores.push_back(pair.first);
    }
    std::sort(unique_scores.begin(), unique_scores.end());

    // 遍历每个分数
    for (int score : unique_scores) {
        // 当前分数的学生数量
        int current_count = score_count[score];

        // 分数小于等于当前分数的学生数量
        int less_equal_count = cumulative_count + current_count;

        // 分数高于当前分数的学生数量
        int greater_count = N - less_equal_count;

        // 判断是否说谎
        if (less_equal_count > greater_count) {
            liars += current_count; // 所有分数为 score 的学生都说谎
        }

        // 更新累计计数
        cumulative_count += current_count;
    }

    return liars;
}

int main() {
    // Add your test cases here
    std::cout << (solution({100, 100, 100}) == 3) << std::endl;
    std::cout << (solution({2, 1, 3}) == 2) << std::endl;
    std::cout << (solution({30, 1, 30, 30}) == 3) << std::endl;
    std::cout << (solution({19, 27, 73, 55, 88}) == 3) << std::endl;
    std::cout << (solution({19, 27, 73, 55, 88, 88, 2, 17, 22}) == 5) << std::endl;
    return 0;
}
  • 使用 cumulative_count 来记录分数小于当前分数的学生数量。
  • 在遍历 unique_scores 时,计算每个分数的 less_equal_count 和 greater_count

http://www.kler.cn/a/404534.html

相关文章:

  • 贪心算法 -- 递增子序列
  • XLNet——打破 BERT 局限的预训练语言模型
  • elasticsearch介绍和部署
  • 实验室管理效率提升:Spring Boot技术的力量
  • ubuntu18.04 vscode c++ filesystem 使用
  • Java基础夯实——2.6 Java中的锁
  • LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力
  • 算法学习笔记(一):滑动窗口和双指针
  • RT_Thread内核源码分析(三)——线程
  • 分布式专题-Redis核心数据结构精讲
  • 《智能指针:明晰资源所有权的 C++利器》
  • 最新Kali安装详细版教程(附安装包,傻瓜式安装教程)
  • String、StringBuilder 和 StringBuffer 的区别
  • shell 接收长参数
  • ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
  • 深入JMeter核心引擎:揭秘JmeterEngine、StandardJmeterEngine、ClientJmeterEngine与Remote的奥秘
  • 基于Matlab的变压器仿真模型的建模方法(3):单相双绕组变压器的拉氏变换象函数模型及其仿真模型
  • DockerFile与容器构建技术
  • Redis的String类型和Java中的String类在底层数据结构上有一些异同点
  • 大数据面试题每日练习--Hadoop是什么?它由哪些核心组件组成?
  • reactflow 中 useNodesState 模块作用
  • 如何在 RK3568 Android 11 系统上排查以太网问题
  • ESP8266 STA模式TCP服务器 电脑手机网络调试助手
  • Ubuntu问题 -- 允许ssh使用root用户登陆
  • 界面控件DevExpress Blazor UI v24.1新版亮点:发布全新文件输入等组件
  • 基于 GDAL 的 RPC 信息处理及影像校正相关操作实现