news 2026/8/22 21:53:27

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }

运行结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 21:53:25

AI合规入门:我国AI合规政策的核心导向与要求

AI合规入门&#xff1a;我国AI合规政策的核心导向与要求&#x1f4dd; 本章学习目标&#xff1a;本章是基础入门部分&#xff0c;帮助零基础读者建立对AI安全合规治理的初步认知。通过本章学习&#xff0c;你将全面掌握"AI合规入门&#xff1a;我国AI合规政策的核心导向与…

作者头像 李华
网站建设 2026/8/22 21:52:53

炉石传说插件 HsMod:32 倍速开包、一键领奖、对手段位全暴露

炉石传说插件 HsMod&#xff1a;32 倍速开包、一键领奖、对手段位全暴露 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod 是一个基于 BepInEx 的炉石传说修改插件&#xff0c;面向想省…

作者头像 李华
网站建设 2026/8/22 21:52:28

Java大厂面试核心知识点与实战技巧全解析

1. 互联网大厂Java面试实战解析最近在技术社区看到一个很有意思的Java面试模拟案例&#xff0c;题目是《严肃面试官与搞笑程序员谢飞机的三轮问答》。这个案例生动展现了大厂Java面试的真实场景&#xff0c;也反映了当前Java技术栈的考察重点。作为经历过多次大厂面试的过来人&…

作者头像 李华
网站建设 2026/8/22 21:51:12

Rust 实现可以被 Python 调用的包

完全固定&#xff0c;照抄就行 Cargo.toml [lib] crate-type ["cdylib", "rlib"][dependencies] pyo3 { version "0.27" }[features] default [] extension-module ["pyo3/extension-module"]pyproject.toml [build-system] r…

作者头像 李华