Read the problem before touching the keyboard
Most failed coding rounds fail in the first two minutes: the candidate starts typing a solution to a problem they have not fully read. Slow down and write these five things down (in a comment, on the whiteboard, or out loud) before any code.
- 1Restate it
One sentence, in your own words. "Given a list of prices, return the biggest profit from one buy followed by one later sell."
- 2Inputs and outputs, with types
array $pricesof ints in,intout. Declare them:function maxProfit(array $prices): int. Can the array be empty? What is returned then? - 3Constraints
How big is n? Can values be negative? Duplicates? Already sorted? These decide the algorithm (see the Big-O lesson below).
- 4Two examples by hand
One normal, one tricky. Work them out on paper. If you cannot do it by hand, you cannot code it.
- 5Edge cases
Empty input, one element, all equal, already sorted, numeric strings where you expected ints (
"10" < "9"compares as numbers, but"10a" < "9"compares as strings, see Module 01).
<?php
// Restated: best profit from one buy then one later sell; 0 if prices only fall.
// Input: list of ints (may be empty). Output: int >= 0.
function maxProfit(array $prices): int
{
$lowest = PHP_INT_MAX;
$best = 0;
foreach ($prices as $price) {
$lowest = min($lowest, $price); // cheapest buy so far
$best = max($best, $price - $lowest); // what if I sell today?
}
return $best;
}
echo maxProfit([7, 1, 5, 3, 6, 4]), "\n"; // normal: buy at 1, sell at 6
echo maxProfit([7, 6, 4, 3, 1]), "\n"; // prices only fall
echo maxProfit([]), "\n"; // empty
echo maxProfit([5]), "\n"; // one day5
0
0
0The two comments at the top are the reading step. The four calls are the examples and edge cases from that step, written before the function body, not bolted on after.
Change the contract to "return [buyDay, sellDay], or null if no profit is possible". Which of the four calls now needs a different expected answer?
