Reputation: 31
Find the largest three elements in an array, Given an array with all distinct elements, find the largest three elements. Expected time complexity is O(n) and extra space is O(1)
<?php
$number = array(1,2,3,4,5,6,7,8,9,10);
print_r($number);
echo "<br>";
$biggest_number_1 = 0;
$biggest_number_2 = 0;
$biggest_number_3 = 0;
for ($i=0; $i < count($number); $i++){
if($number[$i] > $biggest_number_1){
$biggest_number_1 = $number[$i];
}
if($number[$i] > $biggest_number_2 && $number[$i] != 10){
$biggest_number_2 = $number[$i];
}
if($number[$i] > $biggest_number_3 && $number[$i] != 10 && $number[$i] != 9){
$biggest_number_3 = $number[$i];
}
}
echo $biggest_number_1."<br>";
echo $biggest_number_2."<br>";
echo $biggest_number_3;
?>
Upvotes: 1
Views: 413
Reputation: 3440
Simpliest way should be something like that :
$number = array(1,2,3,4,5,6,7,8,9,10);
rsort($number); // order array desc
// Just echo first 3 result in your array
echo $number[0]."<br>";
echo $number[1]."<br>";
echo $number[2];
Now if you want to loop through to your array to get the result, you can try this :
$number = array(1,2,3,4,5,6,7,8,9,10);
$biggest_number_1 = $biggest_number_2= $biggest_number_3 = 0;
foreach ($number as $nb) {
if ($nb > $biggest_number_1) {
$biggest_number_3 = $biggest_number_2;
$biggest_number_2 = $biggest_number_1;
$biggest_number_1 = $nb;
} else if ($nb > $biggest_number_2) {
$biggest_number_3 = $biggest_number_2;
$biggest_number_2 = $nb;
} else if ($nb > $biggest_number_3) {
$biggest_number_3 = $nb;
}
}
echo $biggest_number_1."<br>";
echo $biggest_number_2."<br>";
echo $biggest_number_3;
Upvotes: 1
Reputation: 768
Try this:- This is perfectly work
$number=array(1,2,3,4,5,6,7,8,9,10);
$biggest_number_1 = $biggest_number_2= $biggest_number_3 = 0;
for ($i = 0; $i < sizeof($number) ; $i ++)
{
if ($number[$i] > $biggest_number_3 )
{
$biggest_number_1 = $biggest_number_2;
$biggest_number_2 = $biggest_number_3 ;
$biggest_number_3 = $number[$i];
}
else if ($number[$i] > $biggest_number_2)
{
$biggest_number_1 = $biggest_number_2;
$biggest_number_2 = $number[$i];
}
else if ($number[$i] > $biggest_number_1){
$biggest_number_1 = $number[$i];
}
}
echo $biggest_number_1."<br>";
echo $biggest_number_2."<br>";
echo $biggest_number_3;
Upvotes: 0
Reputation: 198
Just sort the array by ascending and take last 3 element of array.
Upvotes: 0