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
int[] pricesin,intout. Can the array be empty? What is returned then? Can it benull? - 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, values big enough to overflow
int(C# wraps silently unless you usechecked, see Module 01).
// Restated: best profit from one buy then one later sell; 0 if prices only fall.
// Input: int[] prices (may be empty). Output: int >= 0.
Console.WriteLine(MaxProfit([7, 1, 5, 3, 6, 4])); // normal: buy at 1, sell at 6
Console.WriteLine(MaxProfit([7, 6, 4, 3, 1])); // prices only fall
Console.WriteLine(MaxProfit([])); // empty
Console.WriteLine(MaxProfit([5])); // one day
static int MaxProfit(int[] prices)
{
int lowest = int.MaxValue, best = 0;
foreach (int price in prices)
{
lowest = Math.Min(lowest, price); // cheapest buy so far
best = Math.Max(best, price - lowest); // what if I sell today?
}
return best;
}5
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 method, not bolted on after.
Change the contract to "return the buy day and sell day as a tuple, or (-1, -1) if no profit is possible". Which of the four calls now needs a different expected answer?
