பங்கு 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) ஏனென்றால் நாங்கள் ஒரு முறை மட்டுமே விலை வரிசையை கடந்து செல்கிறோம். இங்கே n என்பது விலை வரிசையின் நீளம்.

விண்வெளி சிக்கலானது

மேலே உள்ள குறியீட்டின் இட சிக்கலானது ஓ (1) ஏனென்றால் பதிலை சேமிக்க மட்டுமே நினைவகத்தைப் பயன்படுத்துகிறோம்.

குறிப்புகள்