HouseRobberII::helper()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 8
c 2
b 0
f 0
dl 0
loc 12
rs 10
cc 2
nc 2
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class HouseRobberII
8
{
9
    public static function rob(array $nums): int
10
    {
11
        $n = count($nums);
12
        if ($n === 0) {
13
            return 0;
14
        }
15
        if ($n === 1) {
16
            return $nums[0];
17
        }
18
        if ($n === 2) {
19
            return max($nums[0], $nums[1]);
20
        }
21
        $prev = self::helper($nums, 0, $n - 2);
22
        $next = self::helper($nums, 1, $n - 1);
23
24
        return max($prev, $next);
25
    }
26
27
    public static function rob2(array $nums): int
28
    {
29
        $n = count($nums);
30
        if ($n === 0) {
31
            return 0;
32
        }
33
        if ($n === 1) {
34
            return $nums[0];
35
        }
36
        if ($n === 2) {
37
            return max($nums[0], $nums[1]);
38
        }
39
        $prev = $next = array_fill(0, $n + 1, 0);
40
        [$prev[0], $prev[1], $next[0], $next[1]] = [0, $nums[0], 0, 0];
41
        for ($i = 2; $i <= $n; $i++) {
42
            $prev[$i] = max($prev[$i - 1], $prev[$i - 2] + $nums[$i - 1]);
43
            $next[$i] = max($next[$i - 1], $next[$i - 2] + $nums[$i - 1]);
44
        }
45
46
        return max($prev[$n - 1], $next[$n]);
47
    }
48
49
    private static function helper(array $nums, int $start, int $end): int
50
    {
51
        $prev = $nums[$start];
52
        $next = max($prev, $nums[$start + 1]);
53
        $result = $next;
54
        for ($i = $start + 2; $i <= $end; $i++) {
55
            $result = max($prev + $nums[$i], $next);
56
            $prev = $next;
57
            $next = $result;
58
        }
59
60
        return $result;
61
    }
62
}
63