سوال 121

عنوان سوال : Best Time to Buy and Sell Stock

  • آسان
  • برنامه نویسی پویا
  • آرایه

صورت مسئله:

آرایه‌ای به نام prices به شما داده شده است که در آن، prices[i] قیمت یک سهم در روز iام است.
هدف شما این است که با انتخاب تنها یک روز برای خرید سهم و یک روز متفاوت در آینده برای فروش آن، بیشترین سود ممکن را به دست آورید.

باید بیشترین سود ممکن از این معامله را برگردانید.
اگر نتوان هیچ سودی به دست آورد (یعنی قیمت‌ها فقط کاهش پیدا کرده باشند)، مقدار بازگشتی باید 0 باشد.

مثال ۱:

ورودی: prices = [7,1,5,3,6,4]
خروجی: 5

توضیح:
بهترین حالت این است که در روز دوم (قیمت = ۱) خرید کنید
و در روز پنجم (قیمت = ۶) بفروشید.
سود = ۶ - ۱ = ۵

توجه کنید که خرید قبل از فروش الزامی است؛
بنابراین خرید در روز دوم و فروش در روز اول مجاز نیست.

مثال ۲:

ورودی: prices = [7,6,4,3,1]
خروجی: 0

توضیح:
در این حالت هیچ معامله‌ای انجام نمی‌شود زیرا قیمت‌ها فقط کاهش دارند
و بنابراین هیچ سودی به دست نمی‌آید.

محدودیت‌ها:

  • ‎(1 \leq prices.length \leq 10^5)
  • ‎(0 \leq prices[i] \leq 10^4)

راه حل

public class Solution {
    public int MaxProfit(int[] prices) {
        var minPriceToBuy=prices[0];
        var maxProfit=0;

        for(var i=0; i<prices.Length; i++){
            var profitSellToday=prices[i]-minPriceToBuy;

            if(profitSellToday>maxProfit){
                maxProfit=profitSellToday;
            }

            if(minPriceToBuy>prices[i]){
                minPriceToBuy=prices[i];
            }
        }

        return maxProfit;
    }
}

کپی رایت © mhkarami97