Reputation: 501
How can I find the 2nd largest element in the array, Here is my code but I can't figure out the problem, help would be much appreciated
import java.util.Arrays;
import java.util.Random;
public class NDlargest
{
Random random = new Random();
private int[] array = new int[10];
private int largest;
private int largest2;
public NDlargest()
{
largest = 0;
largest2 = 0;
for (int i =0; i< array.length; i++)
{
array[i] = 1 + random.nextInt(100);
}
System.out.println(Arrays.toString(array));
}
public int getLargest()
{
for (int i = 0; i < array.length; i++)
{
int number = array[i];
if (number > largest)
{
largest = number;
}
}
return largest;
}
public int getSecondLargest()
{
for (int i = 0; i < array.length; i++)
{
int number2 = array[i];
if (largest2 < largest)
{
if (number2 > largest2)
{
largest2 = number2;
}
}
else
{
break;
}
}
return largest2;
}}
Upvotes: 0
Views: 87
Reputation: 26094
int number2 = array[i];
// here is the problem
if (largest2 < largest)
Please replace with the following.
int number2 = array[i];
if (number2 < largest)
Little optimized version of your methods.
public int getLargest()
{
for (int i = 0; i < array.length; i++)
{
if (array[i] > largest)
{
largest = array[i];
}
}
return largest;
}
public int getSecondLargest()
{
for (int i = 0; i < array.length; i++)
{
if (array[i] < largest)
{
if (array[i] > largest2)
{
largest2 = array[i];
}
}
}
return largest2;
}
Upvotes: 3
Reputation: 2586
Start with asking why is break required in your code of finding the second largest number? Essentially, can you find second largest number without looking at all numbers in a list ?
Then, to understand a general solution for finding kth element in a list without sorting, look at http://pine.cs.yale.edu/pinewiki/QuickSelect.
Upvotes: 0
Reputation: 21961
Change your getSecondLargest()
code like:
public int getSecondLargest() {
Arrays.sort(array);
largest2=array[array.length-2];
return largest2;
}
Upvotes: 0