21xrx.com
2024-12-23 02:43:25 Monday
登录
文章检索 我的文章 写文章
C++实现查找第二大数
2023-07-04 20:00:00 深夜i     --     --
C++ 查找 第二大数

在编程语言中,查找第二大数是一道非常基础的问题之一。在C++中,我们可以使用多种算法实现这个问题,包括暴力枚举、排序、去重等等。下面,本文将介绍使用C++语言实现查找第二大数的方法。

方法一:暴力枚举

最直接的方法自然是暴力枚举,对输入的数组进行两层遍历,每一次找到当前未被检索过的最大值,记录下来并进行比较。最终输出次大值。

方法二:排序

第二种方法,我们可以将输入的数组进行排序,然后取排序后的倒数第二个数即可,时间复杂度为O(n log n)。

方法三:去重

第三种方法需要先将输入的数组去重,去重后的数组最大值即为第一大数,然后再对剩余的值进行遍历,取出其中的最大值即可,时间复杂度为O(n)。

综合而言,以上三种方法以暴力枚举的时间复杂度最高,排序和去重的时间复杂度相对较低。在实际编程中,应根据具体问题和时间复杂度要求选择不同的算法。

最后,我们来看一下使用C++实现查找第二大数的代码实现:

方法一:暴力枚举


#include <iostream>

using namespace std;

int main()

{

  int n;

  cin >> n;

  int a[n];

  for(int i = 0; i < n; i++){

    cin >> a[i];

  }

  int max1 = -1, max2 = -1;

  for(int i = 0; i < n; i++){

    if(a[i] > max1){

      max2 = max1;

      max1 = a[i];

    }else if(a[i] > max2 && a[i] != max1){

      max2 = a[i];

    }

  }

  cout << max2 << endl;

  return 0;

}

方法二:排序


#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

  int n;

  cin >> n;

  int a[n];

  for(int i = 0; i < n; i++){

    cin >> a[i];

  }

  sort(a, a+n);

  cout << a[n-2] << endl;

  return 0;

}

方法三:去重


#include <iostream>

#include <set>

using namespace std;

int main()

{

  int n;

  cin >> n;

  int a[n];

  for(int i = 0; i < n; i++){

    cin >> a[i];

  }

  set<int> s(a, a+n);

  int max1 = *s.rbegin();

  s.erase(max1);

  int max2 = *s.rbegin();

  cout << max2 << endl;

  return 0;

}

以上代码实现了查找第二大数的功能,读者可根据实际情况选择合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复