Akash Kapadiya
Akash Kapadiya

Reputation: 31

Find the largest three elements in an array

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

Answers (3)

Micka&#235;l Leger
Micka&#235;l Leger

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

Paras Raiyani
Paras Raiyani

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

Anıl Şenocak
Anıl Şenocak

Reputation: 198

Just sort the array by ascending and take last 3 element of array.

Upvotes: 0

Related Questions