பரிவர்த்தனை கட்டணம் லீட்கோட் தீர்வுடன் பங்கு வாங்க மற்றும் விற்க சிறந்த நேரம்


சிரமம் நிலை நடுத்தர
அடிக்கடி கேட்கப்படுகிறது அமேசான்
அணி டைனமிக் புரோகிராமிங் பேராசை

சிக்கல் அறிக்கை

“பரிவர்த்தனைக் கட்டணத்துடன் பங்குகளை வாங்கவும் விற்கவும் சிறந்த நேரம்” என்ற சிக்கலில், வரிசையில் உள்ள ஒவ்வொரு உறுப்புகளும் அந்த நாளில் கொடுக்கப்பட்ட பங்குகளின் விலையைக் கொண்டிருக்கும் ஒரு வரிசை எங்களுக்கு வழங்கப்படுகிறது.

இன் வரையறை பரிவர்த்தனை ஒரு பங்கை வாங்கி, அந்த ஒரு பங்கை விற்கிறது.

பின்வரும் கட்டுப்பாடுகளின் கீழ் அதிகபட்ச லாபத்தைக் கண்டறிவது எங்கள் பணி:

  1. முந்தைய பங்குகளை விற்காவிட்டால் புதிய பங்குகளை வாங்க முடியாது. ஒரு நேரத்தில் நாம் ஒரு பங்கை வைத்திருக்க முடியும்.
  2. நாம் பல பரிவர்த்தனைகளை செய்யலாம்.
  3. ஒவ்வொரு முறையும் நாங்கள் ஒரு பரிவர்த்தனை செய்வோம், நாங்கள் பரிவர்த்தனைக் கட்டணங்களை செலுத்த வேண்டும்.
  4. ஒரு நேரத்தில் நாம் ஒன்றுக்கு மேற்பட்ட பங்குகளை வாங்க முடியாது.

உதாரணமாக

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

விளக்கம்: பெறக்கூடிய அதிகபட்ச லாபம் 8. பரிவர்த்தனை விவரம் பின்வருமாறு:

பரிவர்த்தனை கட்டணம் லீட்கோட் தீர்வுடன் பங்கு வாங்க மற்றும் விற்க சிறந்த நேரம்

பரிவர்த்தனை கட்டணம் லீட்கோட் தீர்வுடன் பங்குகளை வாங்க மற்றும் விற்க சிறந்த நேரத்தின் அணுகுமுறை

இந்த சிக்கலைத் தீர்க்க, பங்குகளை வாங்குவதன் மூலமும் விற்பதன் மூலமும் நாம் எவ்வாறு லாபத்தை அதிகரிக்க முடியும் என்பதைப் பற்றி சிந்திக்க வேண்டும். இவை அதிகபட்ச லாபம் ஈட்டும் வழிகள்:

  1. பங்குகளை குறைந்தபட்ச விலையில் வாங்கி அதிகபட்ச விலைக்கு விற்பனை செய்வோம்.
  2. ஒவ்வொரு பரிவர்த்தனைக்கும் நாம் கட்டணம் செலுத்த வேண்டியிருப்பதால், விற்பனை விலை> செலவு விலை + கட்டணம் செலுத்தும்போது மட்டுமே பங்குகளை விற்பனை செய்வோம்.
  3. சிறந்த விற்பனையான விலையைத் தேடினாலும், விற்பனை விலை> செலவு விலை + கட்டணம் ஆகியவற்றை எதிர்கொள்ளும்போது பங்குகளை விற்பனை செய்வோம். பின்னர் செலவு விலை செலவு விலை- கட்டணமாக மாறும்.

நடைமுறைப்படுத்தல்

பரிவர்த்தனைக் கட்டணத்துடன் பங்குகளை வாங்க மற்றும் விற்க சிறந்த நேரத்திற்கான சி ++ குறியீடு

//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) ஏனென்றால் பதிலை சேமிக்க மட்டுமே நினைவகத்தைப் பயன்படுத்துகிறோம்.

குறிப்புகள்