java - Determining Highest and Lowest Numbers in an Array -
i'm trying solve problem need write java code find 2 highest , smallest number in array given below conditions:
-every element real number
-every element random
any ideas on best approach?
you have examine every number, best algorithm linear in length of array.
the standard approach scan array, keeping track of 2 smallest , largest numbers you've seen far.
so, given firstmin
, secondmin
, firstmax
, secondmax
respectively smallest, second smallest, largest , second largest values you've seen far, on next iteration of loop:
if (value > firstmax) { secondmax = firstmax; firstmax = value; } else if (value > secondmax) { secondmax = value; } if (value < firstmin) { secondmin = firstmin; firstmin = value; } else if (value < secondmin) { secondmin = value; }
at end of block, maintain invariant firstmin
, secondmin
, firstmax
, secondmax
respectively smallest, second smallest, largest , second largest values you've seen far. proves correctness.
this algorithm linear in length of array , examines each value once , makes minimum number of comparisons. o(1)
in space, , optimal in uses 4 memory locations top , bottom 2 values.
Comments
Post a Comment