BestTimeToBuyAndSellStockWithTransactionFee   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 7
eloc 21
c 2
b 0
f 0
dl 0
loc 35
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A maxProfit() 0 18 4
A maxProfit2() 0 13 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class BestTimeToBuyAndSellStockWithTransactionFee
8
{
9
    public static function maxProfit(array $prices, int $fee): int
10
    {
11
        $n = count($prices);
12
        if ($n <= 0) {
13
            return 0;
14
        }
15
        $dp = array_fill(0, $n, [0, 0]);
16
        foreach ($prices as $i => $price) {
17
            if ($i - 1 < 0) {
18
                $dp[0][0] = 0;
19
                $dp[0][1] = -$price;
20
            } else {
21
                $dp[$i][0] = max($dp[$i - 1][0], $dp[$i - 1][1] + $price - $fee);
22
                $dp[$i][1] = max($dp[$i - 1][1], $dp[$i - 1][0] - $price);
23
            }
24
        }
25
26
        return $dp[$n - 1][0];
27
    }
28
29
    public static function maxProfit2(array $prices, int $fee): int
30
    {
31
        $n = count($prices);
32
        if ($n <= 0) {
33
            return 0;
34
        }
35
        [$cash, $hold] = [0, -$prices[0] - $fee];
36
        foreach ($prices as $i => $price) {
37
            $cash = max($cash, $hold + $price - $fee);
38
            $hold = max($hold, $cash - $price);
39
        }
40
41
        return $cash;
42
    }
43
}
44