Test Failed
Push — master ( c19dce...c10a28 )
by Jinyun
02:53
created

DistanceBetweenBusStops   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 18
eloc 26
c 1
b 0
f 0
dl 0
loc 48
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B distanceBetweenBusStops() 0 19 8
A distanceBetweenBusStops2() 0 9 4
A distanceBetweenBusStops3() 0 14 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class DistanceBetweenBusStops
8
{
9
    public static function distanceBetweenBusStops(array $distance, int $start, int $destination): int
10
    {
11
        if (empty($distance) || $start < 0 || $destination < 0) {
12
            return 0;
13
        }
14
        if ($start > $destination) {
15
            $tmp = $start;
16
            $start = $destination;
17
            $destination = $tmp;
18
        }
19
        $res = $sum = 0;
20
        foreach ($distance as $i => $value) {
21
            if ($i >= $start && $i < $destination) {
22
                $res += $value;
23
            }
24
            $sum += $value;
25
        }
26
27
        return min($res, $sum - $res);
28
    }
29
30
    public static function distanceBetweenBusStops2(array $distance, int $start, int $destination): int
31
    {
32
        if (empty($distance) || $start < 0 || $destination < 0) {
33
            return 0;
34
        }
35
        [$a, $b] = [min($start, $destination), max($start, $destination)];
36
        $slice = array_slice($distance, $a, $b - $a);
37
38
        return min(array_sum($slice), array_sum($distance) - array_sum($slice));
39
    }
40
41
    public static function distanceBetweenBusStops3(array $distance, int $start, int $destination): int
42
    {
43
        if (empty($distance) || $start < 0 || $destination < 0) {
44
            return 0;
45
        }
46
        [$a, $b, $n] = [0, 0, count($distance)];
47
        for ($i = $start; $i !== $destination; $i = ($i + 1) % $n) {
48
            $a += $distance[$i];
49
        }
50
        for ($i = $destination; $i !== $start; $i = ($i + 1) % $n) {
51
            $b += $distance[$i];
52
        }
53
54
        return min($a, $b);
55
    }
56
}
57