Sərinləmə müddəti Leetcode Solution ilə səhmdar alqı-satqısı üçün ən yaxşı vaxt

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Çiy kərpic Amazon Goldman Sachs Yahoo
alqoritmlər kodlaşdırma Dinamik proqramlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 31

Problem bəyanat

Problemdə "Soyutma müddəti ilə birja almaq və satmaq üçün ən yaxşı vaxt" bizə bir sıra verilmişdir ki, massivdəki hər element həmin gün verilmiş stokun qiymətini ehtiva edir.

Əməliyyatların sayında heç bir məhdudiyyət yoxdur. Əməliyyatın tərifi, bir hissə hissə almaq və o bir hissəni satmaqdır.

Bizim vəzifəmiz aşağıdakı məhdudiyyətlər altında maksimum mənfəət tapmaqdır:

  1. əvvəlki hissəni satmamışıqsa yeni bir səhm ala bilmərik. yəni bir anda ən çox bir stoka sahib ola bilərik.
  2. əgər bir gündə bir səhm satırıqsa (i + 1) gündə bir də səhm ala bilmərik. Bu, 1 gün soyutma müddəti

misal

prices = [1,2,3,0,2]
3

Explanation: əldə edilə bilən maksimum mənfəət 3-dür. Əməliyyat detalı:

İlk gün: al

İkinci gün: sat

Üçüncü gün: soyutma

Dördüncü gün: al

Beşinci gün: satmaq

Sərinləmə vaxtı Leetcode Solution ilə Fondun alınması və satılması üçün ən yaxşı vaxt üçün yanaşma

Bu problemi həll etmək üçün bir neçə şeyi qeyd etməliyik:

  1. Bir səhm satmaq istədikdə, səhmləri daha əvvəl almalıyıq. Bir səhm satmaq deməkdir ki, bir səhm almaqdan asılıdır.
  2. Soyutma müddətinin bir günü mütləqdir. Beləliklə, bir səhmdarın alınması soyutma müddətindən asılıdır.

Bu məqamları nəzərə alaraq vəziyyətləri müəyyənləşdirə bilərik:

  • DÖVLƏT-A: Bu vəziyyətdə ya bir hissə ala bilərik, ya da sadəcə istirahət edə bilərik.
  • DÖVLƏT-B: Bir hissə aldıqdan sonra ya hisse sata bilərik, ya da qalan hissəsini götürə bilərik.
  • DÖVLƏT-C: Bu, soyutma rejimidir. Doldurma müddəti bitdikdən sonra DÖVLƏT-A-ya köçürük.

Soyutma müddəti ilə fond almaq və satmaq üçün ən yaxşı vaxtPin

Bu üç dövlət arasındakı əlaqə birinə çevrilə bilər cəbr ifadəsi burada DÖVLƏT-X [i] x gününədək maksimum mənfəəti təmsil edir.

sa->STATE-A,sb->STATE-B,sc->STATE-C
 sa[i]=max(sa[i-1],sc[i-1]);
 sb[i]=max(sb[i-1],sa[i-1]-prices[i]);
 sc[i]=sb[i-1]+prices[i];

N təkrarlamadan sonra maksimum mənfəət maksimum olacaq (sa [n-1], sc [n-1]), çünki mənfəəti maksimum dərəcədə artırmaq istədiyimiz üçün bir hissə alıb satmırıq.

Əsas hallar:

sa[0]=0;
sb[0]=-prices[0]
sc[0]=INT_MIN

Həyata keçirilməsi

Cooldown ilə Stok almaq və satmaq üçün ən yaxşı vaxt üçün C ++ kodu

#include <bits/stdc++.h> 
using namespace std; 
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        if(n<1)return 0;
       int sa[n],sb[n],sc[n];
        sa[0]=0,sb[0]=-prices[0],sc[0]=INT_MIN;
        for(int i=1;i<n;i++)
        {
            sa[i]=max(sa[i-1],sc[i-1]);
            sb[i]=max(sb[i-1],sa[i-1]-prices[i]);
            sc[i]=sb[i-1]+prices[i];
        }
        return max(sa[n-1],sc[n-1]);  
    }
int main() 
{ 
 vector<int> arr = { 1,2,3,0,2 }; 
 cout<<maxProfit(arr)<<endl; 
 return 0;
}
3

Cooldown ilə fond almaq və satmaq üçün ən yaxşı vaxt üçün Java kodu

import java.util.Arrays; 
public class Tutorialcup {
    public static int  maxProfit(int[] prices) {
          int n=prices.length;
    if(n<1)return 0;
    int[] sa = new int[n];
    int[] sb = new int[n];
    int[] sc = new int[n];
    sa[0] = 0;sb[0] = -prices[0]; sc[0] = Integer.MIN_VALUE;

    for (int i = 1; i < n; ++i) {
      sa[i] = Math.max(sa[i-1],sc[i-1]);
      sb[i] = Math.max(sb[i-1],sa[i-1]-prices[i]);
      sc[i] = sb[i-1]+prices[i];
    }

    return Math.max(sa[n-1],sc[n-1]);  
    }
  public static void main(String[] args) {
    int [] arr = {1,2,3,0,2}; 
    int ans=  maxProfit(arr);
    System.out.println(ans);
  }
}
3

Sərinləmə müddəti Leetcode Həlli ilə Birja almaq və satmaq üçün ən yaxşı vaxtın mürəkkəbliyinin təhlili

Zaman mürəkkəbliyi

Yuxarıdakı kodun zaman mürəkkəbliyi O (n) çünki qiymət massivini yalnız bir dəfə keçirik. Burada n qiymət massivinin uzunluğudur.

Kosmik mürəkkəblik

Yuxarıdakı kodun kosmik mürəkkəbliyi O (n) çünki fərqli vəziyyətlərin məlumatlarını saxlamaq üçün bir sıra istifadə edirik.

References

Şərh yaz

Translate »