C获取数字数组中最大值和第二大值

本文介绍一种针对含有重复值数组的高效算法,通过遍历获取最大值的同时,轻松找出最大值之外的第二大值,适用于不允许第二大值等于最大值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大值直接遍历数组即可获取到,但是第二大值获取各种文章都有,但是就是没有最简单的,最大值不要的值就是第二大值,就是这么简单

在大部分情况下,数组列表中是有重复值的,如果不允许第二大值==最大值,需要把forif<= 改为 <,只获取大于当前的值

#include <stdio.h>

int main()
{
  int arr[] = {1, 2, 5, 6, 7, 8, 1, 3, 9, 4, 4, 9};

  int len = sizeof(arr) / sizeof(int);

  // 最大值和索引
  int max = 0, index = 0;
  // 第二大和索引
  int tmax = 0, tindex = 0;

  for (int i = 0; i < len; i++)
  {
    if (max <= arr[i]) {
      // 接收max不要的值
      tmax = max;
      tindex = index;

      // 保存当前找到最大的值
      max = arr[i];
      index = i;
    }
  }

  printf("max=%d-%d\n", index, max);
  printf("tmax=%d-%d\n", tindex, tmax);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值