用 C++ 编写一个程序,找出给定的未排序整数数组中的最大值和第二个最大值
假设我们给出了一个大小为N的未排序整数数组。任务是找到数组中存在的不同的max和第二个max元素。该数组也可能包含重复元素。所以我们只需要找到不同的元素。例如,
输入1-
N = 5 A[ ] = { 2, 2, 1, 3, 4 }
输出-
4 3
说明-从给定的数组中,我们可以看到“4”是最大值,“3”是第二个最大值。
输入2-
N = 4 A[ ] = { 1,3,3,2 }
输出-
3 2
说明-从给定的大小为4的数组中,我们可以看到'3'是最大的,而'2'是第二大的,因此我们将返回32作为输出。
解决这个问题的方法
在给定的大小为N的数组中,也可能有一些重复的元素。为了从数组中找到最大和第二个最大元素,我们可以初始化两个存储最大和第二个最大值的变量。
最初,如果当前元素大于最大值,那么我们将把它的值存储到最大值,将的值存储max(previous)到第二个最大值。
为了找到不同的元素,我们将检查当前元素是否等于max。如果当前值不等于最大值并且也大于第二个最大值,那么我们将用当前值替换第二个最大值的先前值。
初始化并输入N大小的数组。
函数maxAndSecondMax(intarr[],intsize)将数组作为输入和数组的大小。它返回给定数组的最大和第二个最大元素。
迭代数组元素并查找当前元素是否大于最大值,然后将当前值存储到最大值和最大值的先前值以及第二个最大值。
否则,如果当前值大于第二个最大值,则用当前值替换前一个值。此外,当前值不应等于最大值。
检查第二个最大值是否不包含任何值。
返回最大值和第二个最大值作为最终输出。
示例
#includeusing namespace std; void maxAndSecondMax(int *arr, int size){ int max= INT_MIN; int s_max= INT_MIN; for(int i=0;i max){ s_max= max; max= arr[i]; } else if(arr[i]> s_max && arr[i]!= max){ s_max= arr[i]; } } if(s_max==INT_MIN){ s_max= -1; } cout< 输出结果 如果我们运行上面的代码,那么它会打印输出,
6 56和5是数组中的不同元素,它们是最大值和第二个最大值。