Stock III Leetcode Həlli almaq və satmaq üçün ən yaxşı vaxt

Çətinlik səviyyəsi Ağır
Tez-tez soruşulur Çiy kərpic Amazon
alqoritmlər Geyim kodlaşdırma Dinamik proqramlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 103

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

“Səhm III almaq və satmaq üçün ən yaxşı vaxt” problemində, massivdəki hər elementin həmin gün verilmiş stokun qiymətini ehtiva etdiyi bir sıra verilir.

Tərifi əməliyyat bir hissə hissə almaq və o bir hissə 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. ən çox iki əməliyyat edə bilərik.

misal

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

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

İlk gün: al

İkinci gün: istirahət

Üçüncü gün: istirahət

Dördüncü gün: istirahət

Beşinci gün: satmaq

Stock III Leetcode Solution almaq və satmaq üçün ən yaxşı vaxt üçün yanaşma

Bu problem daha çətin bir versiyadır Səhmlər almaq və satmaq üçün ən yaxşı vaxt. Beləliklə, bu problemə atlamadan əvvəl problemin asan versiyasını həll etməlisiniz.

Burada yalnız bir əməliyyat edə biləcəyimiz asan versiyaya nisbətən ən çox iki əməliyyat edə bilərik. bu, maksimum mənfəət verəcək şəkildə bir əməliyyat və ya iki əməliyyat deməkdir.

Problemin ən hiyləgər hissəsi ikinci əməliyyatı necə idarə etməkdir. Bu problemi görmək üçün perspektivimizi dəyişdirdikdən sonra bu problem bu problemin asan bir versiyasına çevrilə bilər.

ilk əməliyyatımızı 200 Rs qazancla tamamladığımızı deyək. (Bu hissə eynidir Səhmlər almaq və satmaq üçün ən yaxşı vaxt). Beləliklə, ilk əməliyyatdan sonra əlimizdə 200 Rs var.

İndi 500 Rs bir hissə almağa gedəndə. İstədiyimiz kimi düşünə bilərik, baxmayaraq ki, səhmlərin qiyməti 500 Rs-dir. Ancaq bizim üçün 300 Rs'dir, çünki onsuz da əlimizdə 200 Rs var və pulsuz əldə etdik. İndi ikinci əməliyyatı da xalis mənfəəti içimizdəki kimi maksimum dərəcədə artıracaq şəkildə edəcəyik Səhmlər almaq və satmaq üçün ən yaxşı vaxt problem.

Bu nümunədən yanaşma daha aydın olacaq:

leetcode həllini Fond III almaq və satmaq üçün ən yaxşı vaxtPin

Həyata keçirilməsi

Stock III almaq və satmaq üçün ən yaxşı vaxt üçün Java kodu

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

Stock III almaq və satmaq üçün ən yaxşı vaxt üçün C ++ kodu

#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

Fond III Leetcode Həlli 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 (1) çünki yaddaşdan yalnız cavabı saxlamaq üçün istifadə edirik.

References

Crack Sistemi Dizayn Müsahibələri
Translate »