Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

कम से कम दो बार शेयर खरीदकर और बेचकर अधिकतम लाभ

एक ट्रेडिंग में, एक खरीदार सुबह शेयर खरीदता है और शाम को बेचता है। यदि एक दिन में अधिकतम दो लेनदेन की अनुमति है। दूसरा लेनदेन तभी शुरू हो सकता है जब पहला पूरा हो जाए। यदि स्टॉक की कीमतें दी गई हैं, तो खरीदार द्वारा कमाया जा सकने वाला अधिकतम लाभ ढूंढें।

इनपुट और आउटपुट

इनपुट: स्टॉक कीमतों की सूची
{2, 30, 15, 10, 8, 25, 80}

आउटपुट: यहां कुल लाभ 100 है।
कीमत 2 पर खरीदकर 30 पर बेचा। लाभ 28।
फिर कीमत 8 पर खरीदकर 80 पर बेचा। लाभ 72।
कुल लाभ 28 + 72 = 100

एल्गोरिदम

findMaxProfit(pricelist, n)

इनपुट: सभी कीमतों की सूची, सूची में आइटम्स की संख्या
आउटपुट: अधिकतम लाभ

शुरुआत
    profit ऐरे को आकार n का परिभाषित करें और 0 से भरें
    maxPrice := pricelist[n-1]
    // अंतिम आइटम चुना गया
    i := n-2 से 0 तक नीचे, करें
        यदि pricelist[i] > maxPrice, तो
            maxPrice := pricelist[i]
        profit[i] := profit[i+1] और maxPrice - pricelist[i] का अधिकतम
    पूर्ण
    minPrice := pricelist[0]
    // पहला आइटम न्यूनतम के रूप में चुना गया
    i := 1 से n-1 तक, करें
        यदि pricelist[i] < minPrice, तो
            minPrice := pricelist[i]
        profit[i] := profit[i-1] और (profit[i] + (pricelist[i] - minPrice)) का अधिकतम
    पूर्ण
    वापस profit[n-1]
अंत

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

int max(int a, int b) {
    return (a > b) ? a : b;
}

int findMaxProfit(int priceList[], int n) {
    int *profit = new int[n];
    for (int i = 0; i < n; i++)
        profit[i] = 0;
    
    int maxPrice = priceList[n-1];
    for (int i = n-2; i >= 0; i--) {
        if (priceList[i] > maxPrice)
            maxPrice = priceList[i];
        profit[i] = max(profit[i+1], maxPrice - priceList[i]);
    }
    
    int minPrice = priceList[0];
    for (int i = 1; i < n; i++) {
        if (priceList[i] < minPrice)
            minPrice = priceList[i];
        profit[i] = max(profit[i-1], profit[i] + (priceList[i] - minPrice));
    }
    
    int result = profit[n-1];
    return result;
}

int main() {
    int priceList[] = {2, 30, 15, 10, 8, 25, 80};
    int n = 7;
    cout << "Maximum Profit = " << findMaxProfit(priceList, n);
}

आउटपुट

Maximum Profit = 100
  1. C++ में जॉब शेड्यूलिंग में अधिकतम लाभ (Maximum Profit in Job Scheduling) C++ में जॉब शेड्यूलिंग में अधिकतम लाभ (Maximum Profit in Job Scheduling)

    समस्या विवरण n अलग-अलग कार्य दिए गए हैं। प्रत्येक कार्य startTime[i] से endTime[i] तक चलता है और profit[i] लाभ देता है। हमें ऐसे कार्यों का सबसेट चुनना है जिनके समय ओवरलैप न हों, ताकि कुल लाभ अधिकतम हो। यदि एक कार्य समय X पर समाप्त होता है, तो दूसरा कार्य समय X पर शुरू हो सकता है। उदाहरण इनपुट sta

  1. - पायथन में लेनदेन शुल्क के साथ स्टॉक खरीद-बिक्री से अधिकतम लाभ का प्रोग्राम

    स्टॉक की कीमतों की सूची prices और प्रति बिक्री लेनदेन शुल्क fee दिया गया है। किसी भी संख्या में लेनदेन करके अधिकतम लाभ ढूंढें। खरीदने से पहले बेचना जरूरी है। उदाहरण इनपुट: prices = [2, 10, 4, 8], fee = 3 आउटपुट: 6 लेनदेन: 2 पर खरीदें, 10 पर बेचें (लाभ 5), 4 पर खरीदें, 8 पर बेचें (लाभ 1), कुल = 6।

  1. - पायथन में कूलडाउन के साथ स्टॉक खरीद-बिक्री से अधिकतम लाभ का प्रोग्राम

    स्टॉक की कीमतों की सूची prices दी गई है। अधिकतम लाभ ढूंढें जहां आप खरीदने से पहले बेच नहीं सकते, और बेचने के बाद अगले दिन खरीद नहीं सकते (1 दिन का कूलडाउन)। उदाहरण इनपुट: prices = [2, 6, 9, 4, 11] आउटपुट: 11 लेनदेन: 2 पर खरीदें, 6 पर बेचें (लाभ 4), दिन 2 कूलडाउन, 4 पर खरीदें, 11 पर बेचें (लाभ 7), क