酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

#include<bits/stdc++.h> using namespace std; //为什么样例第三大的是4,3 2 5 5 1 4 中第三大的不是3吗(•_•)? const int N=52000; int n,a[N],x,sum; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=n;i>1;i--) for(int j=1;j<i;j++){ if(a[j]<a[j+1]) x=a[j],a[j]=a[j+1],a[j+1]=x; } printf("%d",a[3]); return 0; }vei she me hai shi shi jian chao xian

### ⏰时间超限原因 虽然你已经将排序逻辑调整为降序排序,但代码仍然时间超限,主要原因还是在于使用了冒泡排序算法。冒泡排序的时间复杂度是 $O(n^2)$,在本题数据规模下($3\leq n\leq50000$),当 $n$ 取较大值时,$n^2$ 带来的计算量会非常大,导致程序运行时间过长。 ### 💡解决方案 可以使用 C++ 标准库中的 `std::sort` 函数,它采用的是优化后的排序算法,平均时间复杂度为 $O(n log n)$,相比冒泡排序能显著提高效率。 ### 📝优化后的代码 ```cpp #include <cstdio> #include <algorithm> const int N = 52000; int n, a[N]; int main() { // 读取整数 n scanf("%d", &n); // 读取 n 个整数到数组 a 中 for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } // 使用标准库函数 std::sort 对数组 a 进行降序排序 std::sort(a, a + n, std::greater<int>()); // 输出第三大的数 printf("%d", a[2]); return 0; } ``` ### 🔍代码解释 1. **头文件**:引入 `<cstdio>` 用于输入输出操作,引入 `<algorithm>` 以使用 `std::sort` 函数。 2. **数组读取**:通过 `scanf` 读取整数 `n` 和 `n` 个整数到数组 `a` 中。这里数组下标从 0 开始,符合 C 语言数组使用习惯。 3. **排序操作**:使用 `std::sort` 函数并传入 `std::greater<int>()` 作为比较函数,将数组按降序排列。 4. **输出结果**:由于数组已降序排列,`a[2]` 即为第三大的数,使用 `printf` 输出该结果。 ### <bt>解决排序时间超限问题:找出数组中第三大的数<bt> ######[AI问答 | 505点数解答 | 2026-08-04 22:56:50]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]