ពេលវេលាល្អបំផុតក្នុងការទិញនិងលក់ភាគហ៊ុនឡឺទី ៣ ដំណោះស្រាយឡេឡេយ


កម្រិតលំបាក រឹង
សួរញឹកញាប់ កម្មវិធី Adob ​​e ក្រុមហ៊ុន Amazon
អារេ ការសរសេរកម្មវិធីឌីណាមិក

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

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

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

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

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

ឧទាហរណ៍

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

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

ថ្ងៃដំបូង: ទិញ

ថ្ងៃទី ២ ៈសម្រាក

ថ្ងៃទីបីៈសម្រាក

ថ្ងៃទីបួន: សម្រាក

ថ្ងៃទីប្រាំ: លក់

វិធីសាស្រ្តសម្រាប់ពេលវេលាដ៏ល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនដំណោះស្រាយឡេឡេលេខកូដ III

បញ្ហានេះគឺជាកំណែពិបាកជាង ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុន។ ដូច្នេះត្រូវតែដោះស្រាយបញ្ហាកំណែងាយស្រួលមុនពេលលោតចូលបញ្ហានេះ។

បើប្រៀបធៀបទៅនឹងកំណែងាយស្រួលដែលយើងអាចធ្វើប្រតិបត្តិការតែមួយនៅទីនេះយើងអាចធ្វើប្រតិបត្តិការបានច្រើនបំផុត។ ដែលមានន័យថាប្រតិបត្តិការមួយឬប្រតិបត្តិការពីរតាមរបៀបដែលផ្តល់ប្រាក់ចំណេញអតិបរមា។

ផ្នែកដែលពិបាកបំផុតគឺវិធីដោះស្រាយប្រតិបត្តិការទី ២ ។ បញ្ហានេះអាចត្រូវបានបំលែងទៅជាកំណែងាយស្រួលនៃបញ្ហានេះនៅពេលយើងផ្លាស់ប្តូរទស្សនៈរបស់យើងដើម្បីមើលបញ្ហានេះ។

ចូរនិយាយថាយើងបានបញ្ចប់ប្រតិបត្តិការដំបូងរបស់យើងជាមួយនឹងប្រាក់ចំណេញ 200 រូល។ (ផ្នែកនេះគឺដូចគ្នានឹង ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុន) ។ ដូច្នេះបន្ទាប់ពីប្រតិបត្តិការដំបូងយើងមាន 200 រូលនៅក្នុងដៃរបស់យើង។

ឥឡូវនេះនៅពេលយើងទៅទិញភាគហ៊ុន 500 រូពី។ យើងអាចគិតថាវាចូលចិត្តទោះបីជាតម្លៃភាគហ៊ុនគឺ 500 រូលក៏ដោយ។ ប៉ុន្តែសម្រាប់ពួកយើងគឺ ៣០០ because ពីព្រោះយើងមាន ២០០ រូលនៅក្នុងដៃរបស់យើងហើយយើងទទួលបានដោយឥតគិតថ្លៃ។ ឥឡូវនេះយើងនឹងធ្វើប្រតិបត្តិការទីពីរតាមមធ្យោបាយមួយដើម្បីបង្កើនប្រាក់ចំណេញអតិបរមាតាមរបៀបដូចគ្នានឹងយើងបានធ្វើ ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុន បញ្ហា។

វិធីសាស្រ្តនឹងកាន់តែច្បាស់ពីឧទាហរណ៍នេះ៖

ដំណោះស្រាយ leetcode ទៅពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុន 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

កូដ C ++ សម្រាប់ពេលវេលាល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុនទី ៣

#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

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

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

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

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

ភាពស្មុគស្មាញចន្លោះនៃលេខកូដខាងលើគឺ ឱ (១) ពីព្រោះយើងប្រើអង្គចងចាំដើម្បីទុកចម្លើយតែប៉ុណ្ណោះ។

ឯកសារយោង