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