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 sell."
- 2Inputs and outputs, with types
int[] pricesin,intout. Can the array be empty? What is returned then? - 3Constraints
How big is n? Can values be negative? Duplicates? 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, huge values that overflow
int.
public class Main {
// Restated: best profit from one buy then one later sell; 0 if prices only fall.
// Input: int[] prices (may be empty). Output: int >= 0.
static int maxProfit(int[] prices) {
int lowest = Integer.MAX_VALUE, best = 0;
for (int price : prices) {
lowest = Math.min(lowest, price); // cheapest buy so far
best = Math.max(best, price - lowest); // sell today?
}
return best;
}
public static void main(String[] args) {
System.out.println(maxProfit(new int[] {7, 1, 5, 3, 6, 4})); // normal: buy 1, sell 6
System.out.println(maxProfit(new int[] {7, 6, 4, 3, 1})); // only falls
System.out.println(maxProfit(new int[] {})); // empty
System.out.println(maxProfit(new int[] {5})); // one day
}
}5
0
0
0The comments at the top are the reading step. The four calls in main are the examples and edge cases from that step, not an afterthought.
