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
const std::vector<int>& pricesin,intout. Can the vector be empty? What is returned then? Should "no answer" be astd::optional? - 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, and values big enough to overflow
int. Signed overflow is undefined behaviour in C++, so uselong longwhen sums can exceed about two billion (Module 01).
#include <algorithm>
#include <climits>
#include <iostream>
#include <vector>
// Restated: best profit from one buy then one later sell; 0 if prices only fall.
// Input: prices (may be empty). Output: int >= 0.
int maxProfit(const std::vector<int>& prices) {
int lowest = INT_MAX, best = 0;
for (int price : prices) {
lowest = std::min(lowest, price); // cheapest buy so far
best = std::max(best, price - lowest); // what if I sell today?
}
return best;
}
int main() {
std::cout << maxProfit({7, 1, 5, 3, 6, 4}) << '\n'; // normal: buy at 1, sell at 6
std::cout << maxProfit({7, 6, 4, 3, 1}) << '\n'; // prices only fall
std::cout << maxProfit({}) << '\n'; // empty
std::cout << maxProfit({5}) << '\n'; // one day
}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 function body, not bolted on after.
Change the contract to "return std::optional<std::pair<int, int>>: the buy day and sell day, or std::nullopt if no profit is possible". Which of the four calls now needs a different expected answer?
