Test Failed
Push — master ( d743fe...89aa84 )
by Jinyun
02:47
created

ArrayTransformation::transformArray2()   B

Complexity

Conditions 8
Paths 6

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 13
c 1
b 0
f 0
dl 0
loc 20
rs 8.4444
cc 8
nc 6
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class ArrayTransformation
8
{
9
    public static function transformArray(array $arr): array
10
    {
11
        if (empty($arr)) {
12
            return [];
13
        }
14
        [$changed, $n] = [true, count($arr)];
15
        $tmp = $arr;
16
        while ($changed) {
17
            $changed = false;
18
            for ($i = 1; $i < $n - 1; $i++) {
19
                if ($arr[$i - 1] < $arr[$i] && $arr[$i] > $arr[$i + 1]) {
20
                    $tmp[$i] -= 1;
21
                    $changed = true;
22
                } elseif ($arr[$i - 1] > $arr[$i] && $arr[$i] < $arr[$i + 1]) {
23
                    $tmp[$i] += 1;
24
                    $changed = true;
25
                }
26
            }
27
            $arr = $tmp;
28
        }
29
30
        return $arr;
31
    }
32
33
    public static function transformArray2(array $arr): array
34
    {
35
        if (empty($arr)) {
36
            return [];
37
        }
38
        [$changed, $n] = [true, count($arr)];
39
        while ($changed) {
40
            [$prev, $changed] = [$arr[0], false];
41
            for ($i = 1; $i < $n - 1; $i++) {
42
                $curr = $arr[$i];
43
                if ($prev < $curr && $curr > $arr[$i + 1]) {
44
                    [$changed, $arr[$i]] = [true, $curr - 1];
45
                } elseif ($prev > $curr && $curr < $arr[$i + 1]) {
46
                    [$changed, $arr[$i]] = [true, $curr + 1];
47
                }
48
                $prev = $curr;
49
            }
50
        }
51
52
        return $arr;
53
    }
54
}
55