ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនជាមួយនឹងថ្លៃសេវាប្រតិបត្ដិការ Leetcode


កម្រិតលំបាក មធ្យម
សួរញឹកញាប់ ក្រុមហ៊ុន Amazon
អារេ ការសរសេរកម្មវិធីឌីណាមិក លោភលន់

សេចក្តីថ្លែងការណ៍បញ្ហា

នៅក្នុងបញ្ហា“ ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនជាមួយថ្លៃប្រតិបត្តិការ” យើងត្រូវបានផ្តល់ជូននូវជួរមួយដែលធាតុនីមួយៗនៅក្នុងជួរមានតម្លៃភាគហ៊ុនដែលបានផ្តល់ឱ្យនៅថ្ងៃនោះ។

និយមន័យនៃឯកសារ ប្រតិបត្តិការ គឺទិញភាគហ៊ុនមួយចំណែកហើយលក់ភាគហ៊ុនមួយភាគហ៊ុននោះ។

ភារកិច្ចរបស់យើងគឺស្វែងរកប្រាក់ចំណេញអតិបរមាក្រោមការរឹតបន្តឹងដូចខាងក្រោម៖

  1. យើងមិនអាចទិញភាគហ៊ុនថ្មីបានទេប្រសិនបើយើងមិនបានលក់ភាគហ៊ុនមុន។ នោះគឺនៅក្នុងពេលមួយដែលយើងអាចមានភាគហ៊ុនភាគច្រើន។
  2. យើងអាចធ្វើប្រតិបត្តិការច្រើន។
  3. រាល់ពេលដែលយើងធ្វើប្រតិបត្តិការយើងត្រូវបង់ថ្លៃប្រតិបត្តិការ។
  4. ក្នុងពេលមួយយើងមិនអាចទិញភាគហ៊ុនបានច្រើនជាងមួយទេ។

ឧទាហរណ៍

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

ការពន្យល់: ប្រាក់ចំនេញអតិបរិមាដែលអាចទទួលបានគឺ ៨ ។

ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនជាមួយនឹងថ្លៃសេវាប្រតិបត្ដិការ Leetcode

វិធីសាស្រ្តនៃពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនជាមួយនឹងថ្លៃសេវាប្រតិបត្តិការ 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

ការវិភាគស្មុគស្មាញនៃពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនជាមួយនឹងថ្លៃសេវាប្រតិបត្ដិការ Leetcode

ភាពស្មុគស្មាញពេលវេលា

ពេលវេលាស្មុគស្មាញនៃលេខកូដខាងលើគឺ អូរ (n) ពីព្រោះយើងកំពុងឆ្លងកាត់ការតំឡើងតំលៃតែម្តង។ នៅទីនេះ n គឺជាប្រវែងនៃអារេតំលៃ។

ភាពស្មុគស្មាញនៃលំហ

ឱ (១) ពីព្រោះយើងប្រើអង្គចងចាំដើម្បីទុកចម្លើយតែប៉ុណ្ណោះ។

ឯកសារយោង