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();
}
0 Comments