Bird
Raised Fist0
DSA Rustprogramming~5 mins

Buy and Sell Stocks All Variants in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal in the 'Buy and Sell Stocks' problem?
To maximize profit by choosing the best days to buy and sell stocks given their prices over time.
Click to reveal answer
beginner
In the single transaction variant, what is the key approach to find maximum profit?
Track the minimum price seen so far and calculate the profit if sold today; update max profit accordingly.
Click to reveal answer
intermediate
How does the unlimited transactions variant differ from the single transaction variant?
You can buy and sell multiple times, so you sum all positive differences between consecutive days' prices.
Click to reveal answer
advanced
What is the role of dynamic programming in the 'Buy and Sell Stocks with cooldown' variant?
It helps track states like holding, sold, and cooldown to maximize profit while respecting cooldown rules.
Click to reveal answer
advanced
Why do we use a 2D DP array in the 'Buy and Sell Stocks with transaction fee' variant?
To track profits with and without holding a stock on each day while accounting for transaction fees.
Click to reveal answer
In the single transaction stock problem, what do you track to find max profit?
ANumber of transactions
BMaximum price so far only
CSum of all prices
DMinimum price so far and max profit
For unlimited transactions, how do you calculate total profit?
AIgnore price changes
BSum of all positive price differences between consecutive days
COnly one transaction profit
DDifference between max and min price overall
What does cooldown mean in stock trading problems?
AYou must wait one day after selling before buying again
BYou can buy and sell anytime
CYou cannot sell stocks
DYou must buy every day
In the transaction fee variant, when is the fee applied?
AEvery day regardless
BWhen you buy a stock
CWhen you sell a stock
DNo fee applied
Which data structure is commonly used to solve complex stock variants with constraints?
ADynamic Programming arrays
BLinked lists
CStacks
DBinary trees
Explain how to find maximum profit in the single transaction stock problem.
Think about the lowest price before the current day.
You got /3 concepts.
    Describe how cooldown affects buying and selling decisions in stock trading problems.
    Consider what happens right after you sell.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main goal when solving the Buy and Sell Stocks problem variants?
      easy
      A. Maximize the profit by choosing the best days to buy and sell stocks
      B. Minimize the number of transactions regardless of profit
      C. Find the stock price on the last day
      D. Calculate the average stock price over all days

      Solution

      1. Step 1: Understand the problem goal

        The problem asks to maximize profit by buying and selling stocks on certain days.
      2. Step 2: Identify the key objective

        Maximizing profit means buying low and selling high at the best possible times.
      3. Final Answer:

        Maximize the profit by choosing the best days to buy and sell stocks -> Option A
      4. Quick Check:

        Goal = Maximize profit [OK]
      Hint: Focus on profit maximization, not just transactions [OK]
      Common Mistakes:
      • Confusing profit maximization with minimizing transactions
      • Ignoring the buy before sell rule
      • Thinking the goal is to find average price
      2. Which of the following Rust code snippets correctly initializes a vector of stock prices for the Buy and Sell Stocks problem?
      easy
      A. let prices = {7, 1, 5, 3, 6, 4};
      B. let prices = vec![7, 1, 5, 3, 6, 4];
      C. let prices = (7, 1, 5, 3, 6, 4);
      D. let prices = [7, 1, 5, 3, 6, 4];

      Solution

      1. Step 1: Identify Rust vector syntax

        In Rust, vectors are created using vec![...] macro.
      2. Step 2: Check each option

        let prices = vec![7, 1, 5, 3, 6, 4]; uses vec![...], which is correct. let prices = [7, 1, 5, 3, 6, 4]; is an array, not a vector. let prices = (7, 1, 5, 3, 6, 4); is a tuple. let prices = {7, 1, 5, 3, 6, 4}; is invalid syntax.
      3. Final Answer:

        let prices = vec![7, 1, 5, 3, 6, 4]; -> Option B
      4. Quick Check:

        Vector = vec![...] syntax [OK]
      Hint: Use vec![] to create vectors in Rust [OK]
      Common Mistakes:
      • Using array syntax instead of vector
      • Using tuple instead of vector
      • Invalid curly braces for initialization
      3. What is the output of the following Rust code that solves the 'Best Time to Buy and Sell Stock I' problem?
      fn max_profit(prices: Vec<i32>) -> i32 {
          let mut min_price = i32::MAX;
          let mut max_profit = 0;
          for price in prices {
              if price < min_price {
                  min_price = price;
              } else if price - min_price > max_profit {
                  max_profit = price - min_price;
              }
          }
          max_profit
      }
      
      fn main() {
          let prices = vec![7, 1, 5, 3, 6, 4];
          println!("{}", max_profit(prices));
      }
      medium
      A. 7
      B. 6
      C. 4
      D. 5

      Solution

      1. Step 1: Trace the loop to find min_price and max_profit

        Start with min_price = MAX, max_profit = 0. Prices: 7,1,5,3,6,4 - price=7: min_price=7, max_profit=0 - price=1: min_price=1, max_profit=0 - price=5: profit=5-1=4 > 0, max_profit=4 - price=3: profit=3-1=2 < 4, max_profit=4 - price=6: profit=6-1=5 > 4, max_profit=5 - price=4: profit=4-1=3 < 5, max_profit=5
      2. Step 2: Return max_profit

        max_profit is 5 after loop ends.
      3. Final Answer:

        5 -> Option D
      4. Quick Check:

        Max profit = 5 [OK]
      Hint: Track min price and update max profit on each day [OK]
      Common Mistakes:
      • Not updating min_price correctly
      • Calculating profit before updating min_price
      • Confusing max profit with max price
      4. Identify the bug in this Rust function intended to solve the 'Best Time to Buy and Sell Stock II' (multiple transactions allowed):
      fn max_profit(prices: Vec<i32>) -> i32 {
          let mut profit = 0;
          for i in 0..prices.len() {
              if prices[i] > prices[i - 1] {
                  profit += prices[i] - prices[i - 1];
              }
          }
          profit
      }
      medium
      A. Index out of bounds error when i = 0
      B. Profit calculation is incorrect for multiple transactions
      C. Loop should start from 1 instead of 0
      D. Prices vector should be mutable

      Solution

      1. Step 1: Analyze loop index usage

        The loop starts at i=0, but code accesses prices[i - 1], which is prices[-1] at i=0, causing index out of bounds.
      2. Step 2: Identify fix

        Loop should start from i=1 to avoid negative index access.
      3. Final Answer:

        Index out of bounds error when i = 0 -> Option A
      4. Quick Check:

        Negative index access causes runtime error [OK]
      Hint: Start loop from 1 to avoid negative index [OK]
      Common Mistakes:
      • Starting loop at 0 causing invalid index
      • Not checking vector length before access
      • Assuming negative indices are valid
      5. Given the stock prices [3, 3, 5, 0, 0, 3, 1, 4], what is the maximum profit achievable with at most two transactions (buy-sell pairs)?
      hard
      A. 5
      B. 7
      C. 6
      D. 8

      Solution

      1. Step 1: Understand two transactions limit

        We can buy and sell at most twice to maximize profit.
      2. Step 2: Find best two transactions

        Prices: 3,3,5,0,0,3,1,4 - First transaction: buy at 3 (day 0), sell at 5 (day 2), profit = 2 - Second transaction: buy at 0 (day 3), sell at 4 (day 7), profit = 4 Total profit = 2 + 4 = 6
      3. Final Answer:

        6 -> Option C
      4. Quick Check:

        Sum of two best profits = 6 [OK]
      Hint: Split array, find max profit left and right, sum max two [OK]
      Common Mistakes:
      • Counting overlapping transactions
      • Choosing wrong buy/sell days
      • Ignoring the two transactions limit
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard