getting second largest element of the array

 Naive approach

#include <iostream>
// naive solution 2 times traversal of the array;
int getlargest(int arr[], int size)
{
    // focus is to get largest elements index
    int largest = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] > arr[largest])
        {
            largest = i;
        }
    }
    return largest;
}

int secondlargest(int vec[], int n)
{
    int lar = getlargest(vec, n);
    int selar = -1;
    for (int i = 0; i < n; i++)
    {
        if (vec[i] != vec[lar])
        {
            if (selar == i)
                selar = i;
            else if (vec[i] < vec[lar])
                selar = i;
        }
    }
    return selar;
}

int main()
{
    int arraa[] = {1, 3, 2, 0};
    int sizes = sizeof(arraa) / sizeof(arraa[0]);
    std::cout << sizes << std::endl;
    std::cout << "The largest element of the array is: " << getlargest(arraa, sizes) << std::endl;
    std::cout << "The second largest element of the array is: " << secondlargest(arraa, sizes) << std::endl;
}

efficient approach

#include <iostream>

int getSlargest(int arr[], int size)
{
    int largest = 0, seclar = -1;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] > arr[largest])
        {
            seclar = largest;
            largest = i;
        }
        else if (arr[i] != arr[largest])
        {
            if (seclar == -1 || arr[i] > arr[seclar])
                seclar = i;
        }
    }
    return seclar;
}

int main()
{
    std::cout << "appropriate approach to find the second largest element of the array" << std::endl;
    int arr[] = {1, 132, 12, 10};
    int sizeofarr = sizeof(arr) / sizeof(arr[0]);
    std::cout << "size of array = " << sizeofarr << std::endl;
    std::cout << getSlargest(arr, sizeofarr) << std::endl;
    std::cin.get();
}

Post a Comment

0 Comments