You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++单轮遍历求数组最值及出现次数问题求助

一次遍历完成数组最值及出现次数统计的解决方案

嘿,我来帮你搞定这个问题!其实你离成功只差一点点——既然已经能统计最小值的出现次数,把同样的逻辑套用到最大值上就行,完全不需要排序,一次遍历就能搞定所有需求。

核心思路

我们只需要维护四个变量:

  • min_val:存储当前遍历到的最小值
  • min_count:存储当前最小值的出现次数
  • max_val:存储当前遍历到的最大值
  • max_count:存储当前最大值的出现次数

遍历数组时,对每个元素做以下判断:

  1. 与最小值比较:
    • 如果当前元素 < min_val:更新min_val为当前元素,同时把min_count重置为1(因为这是新的最小值,第一次出现)
    • 如果当前元素 == min_val:min_count加1
  2. 与最大值比较:
    • 如果当前元素 > max_val:更新max_val为当前元素,同时把max_count重置为1
    • 如果当前元素 == max_val:max_count加1

完整代码实现

#include <iostream>

int main() {
    int a[] = {2, 3, 4, 2, 7, 4, 7, 2};
    // 计算数组长度,避免硬编码提升灵活性
    int arr_len = sizeof(a) / sizeof(a[0]);

    // 初始化变量:以第一个元素作为初始最小、最大值,次数为1
    int min_val = a[0];
    int min_count = 1;
    int max_val = a[0];
    int max_count = 1;

    // 从第二个元素开始遍历数组
    for (int i = 1; i < arr_len; ++i) {
        // 处理最小值统计逻辑
        if (a[i] < min_val) {
            min_val = a[i];
            min_count = 1;
        } else if (a[i] == min_val) {
            min_count++;
        }

        // 处理最大值统计逻辑
        if (a[i] > max_val) {
            max_val = a[i];
            max_count = 1;
        } else if (a[i] == max_val) {
            max_count++;
        }
    }

    // 输出最终结果
    std::cout << "最小值: " << min_val << ",出现次数: " << min_count << std::endl;
    std::cout << "最大值: " << max_val << ",出现次数: " << max_count << std::endl;

    return 0;
}

代码说明

  • 数组长度通过sizeof(a)/sizeof(a[0])计算,避免硬编码数组长度,适配不同长度的数组
  • 初始值设置为数组第一个元素,确保从第二个元素开始就能正确进行比较和计数
  • 每个元素仅需两次比较(与当前最小值、最大值),时间复杂度为O(n),空间复杂度为O(1),完全满足“仅一次遍历”的要求

运行这段代码,输出结果会是:

最小值: 2,出现次数: 3
最大值: 7,出现次数: 2

这样就完美解决你的问题啦!

内容的提问来源于stack exchange,提问作者Pravissimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:33:29