1+ /*
2+ * You are provided a vector of numbers, where each number represents
3+ * price of a stock on ith day. If you are permitted to only complete
4+ * one transaction per day (i.e buy one and sell one stock), design
5+ * an algorithm to find the maximum profit.
6+ *
7+ * Input: [7, 1, 5, 3, 6, 4]
8+ * Output: 5
9+ * max. difference = 6-1 = 5
10+ * (not 7-1 = 6, as selling price needs to be larger than buying price)
11+ *
12+ * Approach:
13+ *
14+ * We need to find the maximum difference between two numbers in the array
15+ * (which would be maximum profit) such that selling price(second number)
16+ * is bigger than buying price.
17+ */
18+
19+ #include < iostream>
20+ #include < vector>
21+ #include < limits>
22+
23+ int maximum_profit (const std::vector<int >& prices)
24+ {
25+ int min_price = std::numeric_limits<int >::max ();
26+ int max_profit = 0 ;
27+ for (int i = 0 ; i < prices.size (); ++i) {
28+ if (prices[i] < min_price) {
29+ min_price = prices[i];
30+ } else if (prices[i] - min_price > max_profit) {
31+ max_profit = prices[i] - min_price;
32+ }
33+ }
34+ return max_profit;
35+ }
36+
37+ void print_vector (const std::vector<int >& vec) {
38+ for (auto v : vec) {
39+ std::cout << v << " " ;
40+ }
41+ std::cout << std::endl;
42+ }
43+
44+ int main ()
45+ {
46+ std::vector<int > prices{7 , 1 , 5 , 3 , 6 , 4 };
47+ std::cout << " Prices of stocks in last " << prices.size ()
48+ << " days:" << std::endl;
49+ print_vector (prices);
50+ std::cout << " Maximum profit: " << maximum_profit (prices)
51+ << std::endl;
52+
53+ return 0 ;
54+ }
0 commit comments