2015-10-26

Codility Answers 02

Here is my answer to Cod1l1ty training lesson 02.
FrogRiverOne
function solution($X, $A) {
    $c = count($A);
    $current = 0;
    $leaves = [];
    for($i = 0; $i < $c; $i++){
        if($current + 1 == $A[$i]){
            $current++;
        }
        while($current < $X){
            if(!isset($leaves[$current + 1])){
                break;
            }else{
                $current++;
            }
        }
        if($current >= $X){
            return $i;
        }
        
        $leaves[$A[$i]] = 1;
    }
    
    return -1;
}

PermCheck
function solution($a) {
    $tempArr = [];
    $n = count($a);
    
    for($i = 0; $i < $n; $i++){
        if($a[$i] > $n || isset($tempArr[$a[$i]])){
            return 0;
        }
        
        $tempArr[$a[$i]] = 1;
    }
        
    return 1;
}

MissingInteger
function solution($a) {
    $tempArr = [];
    $missing = 1;
    $n = count($a);
    $lookAtTemp = false;
    for($i = 0; $i < $n; $i++){
        if($a[$i] == $missing){
            $missing++;
            $lookAtTemp = true;
        }else{
            $tempArr[$a[$i]] = 1;
        }
        
        while($missing < $n + 1 && $lookAtTemp){
            if(isset($tempArr[$missing])){
                $missing++;
            }else{
                $lookAtTemp = false;
            }
        }
    }
    
    return $missing;
}

MaxCounters
class ct{
    private $arr;
    private $ct;
    
    public function __construct($n){
        $this->ct = $n;
        for($i = 0; $i < $n; $i++){
            $this->arr[$i] = 0;
        }
    }
    
    public function increase($x){
        $this->arr[$x-1] += 1;
    }
    
    public function maxCounter(){
        $max = 0;
        foreach($this->arr as $val){
            $max = ($max < $val ? $val : $max);
        }
        for($i = 0; $i <= $this->ct; $i++){
            $this->arr[$i] = $max;
        }
    }
    
    public function getArr(){
        return $this->arr;
    }
}

function solution($n, $a) {
    $counter = new ct($n);
    
    foreach($a as $val){
        if($val >= 1 && $val <= $n){
            $counter->increase($val);
        }elseif($val == $n + 1){
            $counter->maxCounter();
        }
    }
    
    return $counter->getArr();
}

No comments:

Post a Comment