week2-[一维数组]最大元素

week2-一维数组最大元素

题目描述

给定 NNN 个整数A1,A2,...,ANA_1,A_2,\ldots,A_NA1,A2,...,AN。请求出这 NNN 个数的最大值,并找出最大值的出现位置(A1A_1A1 的位置为 111,A2A_2A2 的位置为2,依此类推)。如果同时存在多个最大的数,按从小到大的顺序输出最大的数出现的所有位置。

输入格式

读入包括 222 行。第一行只有 111 个整数 NNN,表示数的个数。第二行包括 NNN 个整数 A1,A2,...,ANA_1,A_2,\ldots,A_NA1,A2,...,AN。

输出格式

输出 222 行,第一行包括一个整数,表示 A1,A2,...,ANA_1,A_2,\ldots,A_NA1,A2,...,AN 的最大值。 第二行包含若干个整数,表示最大值在 A1,A2,...,ANA_1,A_2,\ldots,A_NA1,A2,...,AN 中的所有出现位置(每两个数之间用恰好一个空格隔开)。

样例 #1

样例输入 #1

复制代码
8
1 3 5 9 2 6 4 2

样例输出 #1

复制代码
9
4

样例 #2

样例输入 #2

复制代码
9
2 5 2 6 8 5 11 3 11

样例输出 #2

复制代码
11
7 9

样例 #3

样例输入 #3

复制代码
5
10 10 10 8 10

样例输出 #3

复制代码
10
1 2 3 5

提示

样例解释1

1,3,5,9,2,6,4,21, 3, 5, 9, 2, 6, 4, 21,3,5,9,2,6,4,2 中的最大值为 999,出现在第 444 个位置。

样例解释2

2,5,2,6,8,5,11,3,112, 5, 2, 6, 8, 5, 11, 3, 112,5,2,6,8,5,11,3,11 中的最大值为 111111,出现在第 777 个位置和第 999 个位置。

样例解释3

10,10,10,8,1010, 10, 10, 8, 1010,10,10,8,10 中的最大值为 101010,出现在第 1,2,3,51,2,3,51,2,3,5 个位置。

数据范围

对于所有数据,1≤N≤500,−100≤Ai≤1001 \le N \le 500, -100 \le A_i \le 1001≤N≤500,−100≤Ai≤100。

1. 阅读题目

  • 输入:
    • 第 1 行:整数 NNN
    • 第 2 行:NNN 个整数 A1,A2,...,ANA_1,A_2,\dots,A_NA1,A2,...,AN
  • 输出:
    1. 第一行:最大值
    2. 第二行:最大值出现的所有位置(从 1 开始),按出现顺序输出

2. 分析问题

思路很直接:

  1. 初始化 maxVal = A[0],pos 空数组保存位置。
  2. 遍历数组:
    • 如果当前元素 > maxVal → 更新 maxVal,清空 pos,记录当前位置
    • 如果当前元素 == maxVal → 在 pos 追加当前位置
  3. 输出 maxVal 和 pos

注意事项:

  • 位置从 1 开始 ,所以索引 i+1 保存到 pos。
  • 数据量小(N≤500N \le 500N≤500),可以直接用数组保存位置。

3. C++ 代码实现(兼容低版本)

c++ 复制代码
#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;

    int A[505];      // 保存输入数组
    int pos[505];    // 保存最大值出现的位置
    int maxVal = -101; // 初始小于最小可能值
    int cnt = 0;     // 记录最大值出现次数

    for (int i = 0; i < N; i++) {
        cin >> A[i];
        if (A[i] > maxVal) {
            maxVal = A[i];
            cnt = 1;
            pos[0] = i + 1; // 保存位置,从1开始
        } else if (A[i] == maxVal) {
            pos[cnt] = i + 1;
            cnt++;
        }
    }

    // 输出最大值
    cout << maxVal << "\n";

    // 输出所有位置
    for (int i = 0; i < cnt; i++) {
        if (i > 0) cout << " ";
        cout << pos[i];
    }
    cout << "\n";

    return 0;
}

4. 示例运行

输入:

复制代码
9
2 5 2 6 8 5 11 3 11

输出:

复制代码
11
7 9

✅ 总结

  • 遍历数组同时统计最大值和位置
  • 出现新最大值时清空位置数组
  • 相同最大值追加位置
  • 时间复杂度 O(N)O(N)O(N),空间复杂度 O(N)O(N)O(N)
相关推荐
武子康14 分钟前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
坤坤子吖1 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢1 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
zh_xuan2 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长2 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚2 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·3 小时前
CSAPP(lecture 13_02 Linking)
c语言·c++
早起CaiCai3 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
梦里寻码3 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法