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


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ ក្រុមហ៊ុន Amazon ឌីសៅ Facebook ក្រុមហ៊ុន Microsoft ក្រុមហ៊ុន Morgan Stanley Uber
ក្បួនដោះស្រាយ អារេ ការសរសេរកូដ លោភលន់ សំភាសន៍ កិច្ចសម្ភាសន៍ LeetCode LeetCodeSolutions

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

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

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

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

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

ឧទាហរណ៍

prices = [7,1,5,3,6,4]
7

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

ថ្ងៃដំបូង: សម្រាក

ថ្ងៃទីពីរៈទិញ

ថ្ងៃទីបីៈលក់

ថ្ងៃទីបួន: ទិញ

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

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

វិធីសាស្រ្តសម្រាប់ពេលវេលាដ៏ល្អបំផុតដើម្បីទិញនិងលក់ភាគហ៊ុន Leetcode Solution  

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

សូម​មើល​ផង​ដែរ
បច្ចេកទេសបង្អួចរអិល

យើងអាចធ្វើឱ្យវាកាន់តែសាមញ្ញប្រសិនបើយើងសង្កេតឃើញថាមីម៉ាម៉ាត្រូវបានបង្កើតឡើងនៅពេលដែលតម្លៃតូចត្រូវបានបន្ថែមទៅមីនីម៉ា។ ដូច្នេះទោះបីតាមដានរាល់មីនីម៉ានិងមីម៉ាម៉ាដើម្បីគណនាប្រាក់ចំណេញអតិបរមាយើងអាចបន្ថែមតម្លៃទាំងនោះដោយផ្ទាល់ទៅនឹងប្រាក់ចំណេញរបស់យើងដែលយើងបានរកឃើញជម្រាលវិជ្ជមានដែលជាតម្លៃ [i]> តម្លៃ [i-1] ។ ការបន្ថែមគុណតម្លៃទាំងអស់នេះនឹងផ្តល់ឱ្យយើងនូវប្រាក់ចំណេញអតិបរមា។

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

ការអនុវត្តន៍

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

#include <bits/stdc++.h> 
using namespace std; 
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        int ans = 0;
        for (int i = 1; i < n; i++) {
            if (prices[i] > prices[i - 1])
                ans += prices[i] - prices[i - 1];
        }
        return ans;
    }
int main() 
{ 
 vector<int> arr = { 7,1,5,3,6,4 }; 
 cout<<maxProfit(arr)<<endl; 
 return 0;
}
7

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

import java.util.Arrays; 
public class Tutorialcup {
     public static int maxProfit(int[] prices) {
        int ans = 0;
        int n=prices.length;
        for (int i = 1; i < n; i++) {
            if (prices[i] > prices[i - 1])
                ans += prices[i] - prices[i - 1];
        }
        return ans;
    }
  public static void main(String[] args) {
    int [] arr = {7,1,5,3,6,4}; 
    int ans=  maxProfit(arr);
    System.out.println(ans);
  }
}
7

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

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

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

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

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

ឯកសារយោង