【发布时间】:2011-01-24 11:05:22
【问题描述】:
是否可以通过只遍历数组一次从整数数组中找到第二个最大数?
例如,我有一个包含五个整数的数组,我想从中找到第二个最大数。这是我在采访中的一次尝试:
#define MIN -1
int main()
{
int max=MIN,second_max=MIN;
int arr[6]={0,1,2,3,4,5};
for(int i=0;i<5;i++){
cout<<"::"<<arr[i];
}
for(int i=0;i<5;i++){
if(arr[i]>max){
second_max=max;
max=arr[i];
}
}
cout<<endl<<"Second Max:"<<second_max;
int i;
cin>>i;
return 0;
}
然而,面试官提出了测试用例int arr[6]={5,4,3,2,1,0};,这阻止了它第二次进入if 条件。
我对面试官说,唯一的方法是解析数组两次(两个for 循环)。有人有更好的解决方案吗?
【问题讨论】:
-
在寻找第二个最大值的过程中,数组是否被重新排序?
-
使用
Heap结构代替array或使用sorted array结构