ግብይት በክፍያ Leetcode መፍትሔ አማካኝነት አክሲዮን ለመግዛት እና ለመሸጥ የተሻለው ጊዜ


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ አማዞን
ሰልፍ ተለዋዋጭ ፕሮግራም ስስታም

የችግር እሴት

በችግር ውስጥ “በግብይት ክፍያ ለመግዛት እና ለመሸጥ ምርጥ ጊዜ” ውስጥ ፣ በድርድሩ ውስጥ እያንዳንዱ ንጥረ ነገር በዚያ ቀን የተሰጠውን የአክሲዮን ዋጋ የሚይዝበት ድርድር ተሰጥቶናል።

ግብይት አንድ አክሲዮን በመግዛት ያንን አንድ አክሲዮን በመሸጥ ላይ ነው።

የእኛ ተግባር በሚከተሉት ገደቦች ከፍተኛውን ትርፍ ማግኘት ነው-

  1. የቀደመውን ክምችት ካልሸጥን አዲስ አክሲዮን መግዛት አንችልም ፡፡ ያ ቢበዛ አንድ ክምችት ሊኖረን በሚችልበት ጊዜ ላይ ነው ፡፡
  2. ብዙ ግብይቶችን ማድረግ እንችላለን ፡፡
  3. እኛ ግብይት ባደረግን ቁጥር የግብይት ክፍያዎችን መክፈል ያስፈልገናል ፡፡
  4. በአንድ ጊዜ ከአንድ በላይ አክሲዮን መግዛት አንችልም ፡፡

ለምሳሌ

prices = [1, 3, 2, 8, 4, 9], fee=2
8

ማብራሪያ: ሊገኝ የሚችለው ከፍተኛ ትርፍ 8. የግብይት ዝርዝርን የሚከተለው ነው-

ግብይት በክፍያ Leetcode መፍትሔ አማካኝነት አክሲዮን ለመግዛት እና ለመሸጥ የተሻለው ጊዜ

የግብይት ክፍያ ሌቲኮድ መፍትሄን በመጠቀም አክሲዮን ለመግዛት እና ለመሸጥ የተሻለው ጊዜ አቀራረብ

ይህንን ችግር ለመቅረፍ አክሲዮን በመግዛትና በመሸጥ ትርፉን እንዴት ከፍ ማድረግ እንደምንችል ማሰብ አለብን ፡፡ ከፍተኛ ትርፍ ለማግኘት እነዚህ መንገዶች ናቸው

  1. አክሲዮኑን በዝቅተኛ ዋጋ እንገዛለን እና በከፍተኛው ዋጋ እንሸጣለን ፡፡
  2. ለእያንዳንዱ ግብይት ክፍያ መክፈል ስላለብን አክሲዮኑን የምንሸጠው የመሸጫ ዋጋ> የወጪ ዋጋ + ክፍያ ሲከፈል ብቻ ነው።
  3. በጣም ጥሩውን የመሸጫ ዋጋ ብንፈልግም ፣ የመሸጫ ዋጋ> የወጪ ዋጋ + ክፍያ ሲያጋጥመን ክምችቱን እንሸጣለን። ከዚያ የወጪው ዋጋ የወጪ ዋጋ- ክፍያ ይሆናል።

አፈጻጸም

የግብይት ክፍያ ለመግዛት እና ለመሸጥ ለተሻለ ጊዜ C ++ ኮድ

//function to find maximum profit
#include <bits/stdc++.h> 
using namespace std; 
    int Profit(vector<int>& prices, int fee) {
        int n = prices.size();
        int ans = 0;
        int mn = prices[0];
        for(int i=0;i<n;i++)
        {
         if (prices[i] < mn)
                mn = prices[i];
         if(prices[i] > mn + fee)
         {
              ans += prices[i] - fee - mn;
              mn = prices[i] - fee;
         }
            
        }
           return ans;  
    }

int main() 
{ 
 vector<int> arr = {1, 3, 2, 8, 4, 9}; 
 int fee=2;
 cout<<Profit(arr,fee)<<endl; 
 return 0;
}
8

የግብይት ክፍያ ለመግዛት እና ለመሸጥ ለተሻለ ጊዜ የጃቫ ኮድ

import java.util.Arrays; 
public class Tutorialcup {
 public static  int maxProfit(int[] prices, int fee) {
        int n = prices.length;
        int ans = 0;
        int mn = prices[0];
        for(int i=0;i<n;i++)
        {
         if (prices[i] < mn)
                mn = prices[i];
         if(prices[i] > mn + fee)
         {
              ans += prices[i] - fee - mn;
              mn = prices[i] - fee;
         }
            
        }
           return ans;  
    }
  public static void main(String[] args) {
    int [] arr = {1, 3, 2, 8, 4, 9}; 
    int fee=2;
    int ans=  maxProfit(arr,fee);
    System.out.println(ans);
  }
}
8

የግብይት ክፍያ ሌቲኮድ መፍትሄን በመጠቀም አክሲዮን ለመግዛት እና ለመሸጥ የተሻለው ጊዜ ውስብስብነት ትንታኔ

የጊዜ ውስብስብነት

ከላይ ያለው ኮድ የጊዜ ውስብስብነት ነው ሆይ (n) ምክንያቱም የዋጋ ድርድርን አንድ ጊዜ ብቻ ስለምናልፍ ነው። እዚህ n የዋጋ ድርድር ርዝመት ነው።

የቦታ ውስብስብነት

ኦ (1) ምክንያቱም እኛ ማህደረ ትውስታን የምንጠቀመው መልሱን ለማከማቸት ብቻ ነው ፡፡

ማጣቀሻዎች