SqrtX::sqrt()   B
last analyzed

Complexity

Conditions 7
Paths 6

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 15
c 2
b 0
f 0
dl 0
loc 22
rs 8.8333
cc 7
nc 6
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class SqrtX
8
{
9
    public static function sqrt(int $x): int
10
    {
11
        if ($x < 0) {
12
            return 0;
13
        }
14
        if ($x === 0 || $x === 1) {
15
            return $x;
16
        }
17
        [$ans, $left, $right] = [0, 1, $x];
18
        while ($left <= $right) {
19
            $middle = $left + (int) floor(($right - $left) / 2);
20
            if ($middle > $x / $middle) {
21
                $right = $middle - 1;
22
            } elseif ($middle < $x / $middle) {
23
                $left = $middle + 1;
24
                $ans = $middle;
25
            } else {
26
                return $middle;
27
            }
28
        }
29
30
        return $ans;
31
    }
32
}
33