Comment pouvons-nous trouver une deuxième maximale de la matrice de manière efficace?

Est-il possible de trouver le deuxième nombre maximal à partir d'un tableau d'entiers en parcourant le tableau qu'une seule fois?

Comme un exemple, j'ai un tableau de cinq entiers à partir de laquelle je veux trouver un deuxième nombre maximum. Ici est une tentative que j'ai donné dans l'interview:

#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;
}

L'interviewer, cependant, est venu avec le cas de test int arr[6]={5,4,3,2,1,0};, ce qui l'empêche d'aller à la if condition la deuxième fois.
Je l'ai dit à l'enquêteur que le seul moyen serait d'analyser le tableau en deux temps (deux for boucles). Quelqu'un at-il une meilleure solution?

  • Importe-t-il, est le tableau est réorganisée dans le processus de recherche de la seconde maximum?
  • utilisation Heap structure au lieu array ou de l'utilisation sorted array structure
InformationsquelleAutor Xinus | 2010-03-06