Əməliyyat haqqı Leetcode Həlli ilə Səhmlər almaq və satmaq üçün ən yaxşı vaxt

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Amazon
alqoritmlər Geyim kodlaşdırma Dinamik proqramlaşdırma Görməmiş müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 35

Problem bəyanat

"Əməliyyat haqqı ilə birja 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. Bir çox əməliyyat edə bilərik.
  3. Hər dəfə bir əməliyyat edəcəyik, əməliyyat haqqını ödəməyimiz lazımdır.
  4. Bir anda birdən çox səhm ala bilmərik.

misal

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

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

Əməliyyat haqqı Leetcode Həlli ilə Səhmlər almaq və satmaq üçün ən yaxşı vaxtPin

Əməliyyat haqqı Leetcode Həlli ilə Səhmlər almaq və satmaq üçün ən yaxşı vaxtın yanaşması

Bu problemi həll etmək üçün səhm alqı-satqısı ilə qazancı necə artıracağımızı düşünmək lazımdır. Bunlar maksimum mənfəət əldə etməyin yollarıdır:

  1. Səhmləri minimum qiymətə alıb maksimum qiymətə satacağıq.
  2. Hər bir əməliyyat üçün bir ödəniş ödəməli olduğumuz üçün, səhmləri yalnız satış qiyməti> maya dəyəri + ödəniş olduqda satacağıq.
  3. Ən yaxşı satış qiymətini axtarmağımıza baxmayaraq satış qiyməti> maya dəyəri + ödənişlə qarşılaşdığımızda səhmləri satacağıq. O zaman maya dəyəri maya dəyəri olacaqdır.

Həyata keçirilməsi

Əməliyyat haqqı ilə birja almaq və satmaq üçün ən yaxşı vaxt üçün C ++ kodu

//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

Əməliyyat haqqı ilə birja almaq və satmaq üçün ən yaxşı vaxt üçün Java kodu

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

Əməliyyat haqqı Leetcode Həlli ilə Stok 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

O (1) çünki yaddaşdan yalnız cavabı saxlamaq üçün istifadə edirik.

References

Şərh yaz

Translate »