સ્ટોક III લિટકોડ સોલ્યુશનને ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય


મુશ્કેલી સ્તર હાર્ડ
વારંવાર પૂછવામાં આવે છે એડોબ એમેઝોન
અરે ડાયનેમિક પ્રોગ્રામિંગ

સમસ્યા નિવેદન

"સ્ટોક III ને ખરીદવાનો અને વેચવાનો શ્રેષ્ઠ સમય" સમસ્યામાં અમને એરે આપવામાં આવે છે જ્યાં એરેના દરેક ઘટકમાં તે દિવસે આપેલા સ્ટોકની કિંમત હોય છે.

ની વ્યાખ્યા વ્યવહાર શેરનો એક હિસ્સો ખરીદે છે અને તે શેરનો એક શેર વેચે છે.

અમારું કાર્ય નીચેના નિયંત્રણો હેઠળ મહત્તમ નફો શોધવાનું છે:

  1. જો આપણે પહેલાનો સ્ટોક વેચ્યો ન હોય તો અમે નવો સ્ટોક ખરીદી શકતા નથી. તે એક સમયે અમારી પાસે એક સ્ટોક હોઈ શકે છે.
  2. અમે વધુમાં વધુ બે વ્યવહાર કરી શકીએ છીએ.

ઉદાહરણ

prices = [1,2,3,4,5]
4

સમજૂતી: મહત્તમ નફો જે મેળવી શકાય છે તે 4 છે. વ્યવહારની વિગત નીચે મુજબ છે:

પ્રથમ દિવસ: ખરીદો

બીજો દિવસ: આરામ

ત્રીજો દિવસ: બાકીના

ચોથો દિવસ: આરામ

પાંચમો દિવસ: વેચો

સ્ટોક III લીટકોડ સોલ્યુશનને ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય મેળવવાનો અભિગમ

આ સમસ્યા તેનું સખત સંસ્કરણ છે સ્ટોક ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય. તેથી આ સમસ્યામાં કૂદતા પહેલા સમસ્યાનું સરળ સંસ્કરણ હલ કરવું જોઈએ.

સરળ સંસ્કરણની તુલનામાં જ્યાં આપણે અહીં ફક્ત એક જ વ્યવહાર કરી શકીએ છીએ, અમે વધુમાં વધુ બે વ્યવહાર કરી શકીએ છીએ. જેનો અર્થ થાય છે ક્યાં તો એક વ્યવહાર અથવા બે વ્યવહારો એવી રીતે કે મહત્તમ નફો આપે.

મુશ્કેલીનો મુશ્કેલ ભાગ એ છે કે બીજા વ્યવહારને કેવી રીતે સંચાલિત કરવો. એકવાર આપણે આ સમસ્યા જોવા માટે આપણો દ્રષ્ટિકોણ બદલીએ છીએ, આ સમસ્યાને આ સમસ્યાનું સરળ સંસ્કરણમાં રૂપાંતરિત કરી શકાય છે.

ચાલો કહીએ કે અમે 200 રૂપિયાના નફા સાથે અમારું પહેલું વ્યવહાર પૂર્ણ કર્યું છે. (આ ભાગ જેવો જ છે સ્ટોક ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય). તો પહેલા ટ્રાન્ઝેક્શન પછી અમારી પાસે 200 રૂપિયા છે.

હવે જ્યારે અમે 500 રૂપિયાનો સ્ટોક ખરીદવા જઈએ છીએ. અમે એવું વિચારી શકીએ છીએ, જોકે શેરની કિંમત 500 રૂપિયા છે. પરંતુ અમારા માટે તે 300 રૂપિયા છે કારણ કે અમારી પાસે પહેલાથી જ 200 રૂપિયા આપણા હાથમાં છે અને અમે તે મફતમાં મેળવી લીધું છે. હવે આપણે જે રીતે કર્યું તે જ રીતે ચોખ્ખો નફો વધારવા માટે આ રીતે બીજો વ્યવહાર કરીશું સ્ટોક ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય સમસ્યા.

આ ઉદાહરણથી અભિગમ વધુ સ્પષ્ટ થશે:

સ્ટોક ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમયનો લેટકોડ સોલ્યુશન III

અમલીકરણ

સ્ટોકને ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમયનો જાવા કોડ III

import java.util.Arrays; 
public class Tutorialcup {
    public static int maxProfit(int[] prices) {
  int firstSell = 0;
  int secondSell = 0;
  int firstBuy = Integer.MAX_VALUE;
  int secondBuy = Integer.MAX_VALUE;
  for(int i = 0; i < prices.length; i++) {
    int p = prices[i];
    firstBuy = Math.min(firstBuy, p);
    firstSell = Math.max(firstSell, p - firstBuy);
    secondBuy = Math.min(secondBuy, p - firstSell);
    secondSell = Math.max(secondSell, p - secondBuy);
  }
  
  return secondSell;
    }
  public static void main(String[] args) {
    int [] arr = {1,2,3,4,5}; 
    int ans=  maxProfit(arr);
    System.out.println(ans);
  }
}
4

સ્ટોક ખરીદવા અને વેચવાનો શ્રેષ્ઠ સમય માટે સી ++ કોડ III

#include <bits/stdc++.h> 
using namespace std; 
     int maxProfit(vector<int>& prices) {
  int firstSell = 0;//stores profit after one sell
  int secondSell = 0;//stores profit after two sell
  int firstBuy = INT_MAX;
  int secondBuy = INT_MAX;
  int n=prices.size();
        for(int i=0;i<n;i++)
        {
            firstBuy=min(firstBuy,prices[i]);
            firstSell=max(firstSell,prices[i]-firstBuy);
            secondBuy=min(secondBuy,prices[i]-firstSell);
            secondSell=max(secondSell,prices[i]-secondBuy); 
        }
        return secondSell;
    }
int main() 
{ 
 vector<int> arr = { 1,2,3,4,5 }; 
 cout<<maxProfit(arr)<<endl; 
 return 0;
}
4

સ્ટોક III લિટકોડ સોલ્યુશનને ખરીદવા અને વેચવાના શ્રેષ્ઠ સમયનું જટિલતા વિશ્લેષણ

સમયની જટિલતા

ઉપરોક્ત કોડની સમય જટિલતા છે ઓ (એન) કારણ કે અમે ફક્ત એક જ વાર ભાવના એરેને વટાવીએ છીએ. અહીં n એ એરેની લંબાઈ છે.

જગ્યાની જટિલતા

ઉપરોક્ત કોડની અવકાશ જટિલતા છે ઓ (1) કારણ કે આપણે ફક્ત જવાબ સ્ટોર કરવા માટે મેમરીનો ઉપયોગ કરીએ છીએ.

સંદર્ભ