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

C语言/数据结构数组题解:寻找数组中第三大的不同数字——O(n)时间O(1)空间

问题描述

小明正在参加一个在线游戏比赛,比赛结束后系统会显示所有玩家的分数列表。由于系统只显示前三名的分数,小明想知道自己是否进入了前三名。但是系统只显示了所有玩家的分数,没有直接给出排名。现在需要你帮助小明快速找出分数列表中第三大的分数是多少。

要求:

  1. 设计一个算法,找出给定分数列表中第三大的分数。
  2. 如果列表中不同分数的数量少于三个,则返回最大的分数。
  3. 注意分数可能重复,排名时重复的分数只算一个名次。

测试样例

样例1:

输入:scores = [5, 2, 8, 8, 3, 5, 1]输出:3解释:去重排序后分数为 [1, 2, 3, 5, 8],第三大的分数是 3。

样例2:

输入:scores = [10, 10, 10]输出:10解释:只有一种分数,第三大的分数就是最大的分数 10。

样例3:

输入:scores = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]输出:8解释:去重后分数从大到小为 [10, 9, 8, ...],第三大的分数是 8。

约束条件

  • 1 ≤ scores.length ≤ 1000
  • -1000 ≤ scores[i] ≤ 1000
  • 分数列表可能包含重复值
  • 如果不同分数的数量少于三个,则返回最大的分数

程序代码

#include <stdio.h>

#include <limits.h>

int thirdMax(int* scores, int scoresSize) {

long first = -1000000000;

long second = -1000000000;

long third = -1000000000;

for (int i = 0; i < scoresSize; i++) {

int x = scores[i];

// 跳过重复值

if (x == first || x == second || x == third) {

continue;

}

if (x > first) {

third = second;

second = first;

first = x;

} else if (x > second) {

third = second;

second = x;

} else if (x > third) {

third = x;

}

}

// 如果不同分数少于3个,返回最大值

if (third == -1000000000) {

return first;

}

return third;

}

int main() {

int scores1[] = {5, 2, 8, 8, 3, 5, 1};

int scores2[] = {10, 10, 10};

int scores3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

printf("%d\n", thirdMax(scores1, 7)); // 3

printf("%d\n", thirdMax(scores2, 3)); // 10

printf("%d\n", thirdMax(scores3, 10)); // 8

return 0;

}

#include <stdio.h> #include <limits.h> int thirdMax(int* scores, int scoresSize) { long first = -1000000000; long second = -1000000000; long third = -1000000000; for (int i = 0; i < scoresSize; i++) { int x = scores[i]; // 跳过重复值 if (x == first || x == second || x == third) { continue; } if (x > first) { third = second; second = first; first = x; } else if (x > second) { third = second; second = x; } else if (x > third) { third = x; } } // 如果不同分数少于3个,返回最大值 if (third == -1000000000) { return first; } return third; } int main() { int scores1[] = {5, 2, 8, 8, 3, 5, 1}; int scores2[] = {10, 10, 10}; int scores3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; printf("%d\n", thirdMax(scores1, 7)); // 3 printf("%d\n", thirdMax(scores2, 3)); // 10 printf("%d\n", thirdMax(scores3, 10)); // 8 return 0; }

运行结果

http://www.cnnetsun.cn/news/4164670.html

相关文章:

  • AI合规入门:我国AI合规政策的核心导向与要求
  • 炉石传说插件 HsMod:32 倍速开包、一键领奖、对手段位全暴露
  • Java大厂面试核心知识点与实战技巧全解析
  • Rust 实现可以被 Python 调用的包
  • 简繁互转怎么一键搞定?Calibre 插件 TradSimpChinese 快速上手指南
  • OpenCore Legacy Patcher 完整指南:3 步给老 Mac 装上最新 macOS(可逆、免费)
  • UDP与TCP协议深度解析:从核心原理到网络编程实战
  • 3步导出QQ空间历史说说:GetQzonehistory 完整操作指南
  • AI模型部署实战:FDE工程师的核心技能与工作流解析
  • AI翻译模型本地部署指南:用Sakura启动器从下载到起服务只要5分钟
  • SpringBoot集成Lettuce连接Redis:从基础配置到生产实践
  • 团队招聘误区与高效人才管理策略
  • C++面试核心要点与内存管理深度解析
  • LLaMA-Factory 微调提速:3 个开关压缩 7B 模型训练时间与显存
  • LLM Agent域外工具推理能力评估:AgentEscapeBench基准设计与实践
  • 大厂Java面试核心:Java基础、Spring Boot与Redis深度解析
  • C++模板参数获取:从基础使用到编译期反射的完整指南
  • 免费听全网易云和QQ音乐:第三方Web播放器NeteaseMusic完整使用指南
  • AI智能体部署后评估:从静态测试到持续监控的工程实践
  • 基于OpenClaw与AI大模型的求职辅助系统开发实践
  • 结构化面试自我认知类题目解析与应对技巧
  • 数学建模竞赛实战:从时空预测到优化调度完整解决方案
  • 【原创】基于微信小程序+AI大模型+uni-app的母婴用品商城与育儿知识小程序(设计与实现)
  • 机密计算与TEE技术:为AI智能体构建硬件级数据安全保险箱
  • 自动驾驶世界模型算法:技术要点与蔚来面试解析
  • qmcdump:3条命令把QQ音乐qmcflac/qmc0/qmc3解密成标准flac/mp3
  • 多模态情感分析指南:5种融合策略一次讲清
  • 3 条命令搞定 Papermerge 部署:让扫描件也能全文搜索
  • 选对AI论文写作软件提前 2 周交稿!高口碑工具盘点 + 避坑全攻略
  • 维恩图入门:从集合概念到容斥原理的图形化学习指南