Passed
Push — master ( 078dde...fa793b )
by Jinyun
261:12 queued 151:55
created

DuplicateZeros   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 16
eloc 29
c 1
b 0
f 0
dl 0
loc 47
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B duplicateZeros() 0 24 9
B duplicateZeros2() 0 16 7
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class DuplicateZeros
8
{
9
    public static function duplicateZeros(array & $arr): void
10
    {
11
        if (empty($arr)) {
12
            return;
13
        }
14
        $cnt = 0;
15
        foreach ($arr as $num) {
16
            if ($num === 0) {
17
                $cnt++;
18
            }
19
        }
20
        [$m, $n] = [count($arr), count($arr) + $cnt];
21
        for ($i = $m - 1, $j = $n - 1; $i < $j; $i--, $j--) {
22
            if ($arr[$i] !== 0) {
23
                if ($j < $m) {
24
                    $arr[$j] = $arr[$i];
25
                }
26
            } else {
27
                if ($j < $m) {
28
                    $arr[$j]= $arr[$i];
29
                }
30
                $j--;
31
                if ($j < $m) {
32
                    $arr[$j] = $arr[$i];
33
                }
34
            }
35
        }
36
    }
37
38
    public static function duplicateZeros2(array & $arr): void
39
    {
40
        if (empty($arr)) {
41
            return;
42
        }
43
        [$n, $k] = [count($arr), 0];
44
        for ($i = 0; $k + $i < $n; $i++) {
45
            $k += $arr[$i] === 0 ? 1 : 0;
46
        }
47
        for ($i = $i - 1; $k > 0; $i--) {
48
            if ($i + $k < $n) {
49
                $arr[$i + $k] = $arr[$i];
50
            }
51
            if ($arr[$i] === 0) {
52
                $k--;
53
                $arr[$i + $k] = $arr[$i];
54
            }
55
        }
56
    }
57
}
58