0

学習のために。簡単な質問を見つけましたが、もっと練習して、関数を使用して、または通常の方法で問題の解決策を見つけたいので、いくつかの解決策があることを知っています。

そして、質問は次のようになります

Given an array of integers, how do you determine if there are duplicates?

a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5, 3]

そして、ここに私の解決策があります:

JavaScriptの場合:

 function has_dup(arr){

        for(i=0; i< arr.length; i++){
            checker = arr[i];
            duplicates = 0;
            for(x=0; x < arr.length; x++ ){

                //if duplicate          
                if(checker == arr[x]){
                    duplicates++;
                }
            }
        }

        //if has duplicate
        if(duplicates > 1){
            return true;
        }else{
            return false;
        }   
    }

//first run
arr = [1,2,3,4,5];
alert(has_dup(arr));

//second run
arr2 = [1, 2, 3, 4, 5, 3];
alert(has_dup(arr2));

そしてPHPで:

$arr = array(1,2,3,4,5);
$arr2 = array(1,2,3,4,5,3);

function check_duplicate($arr){
  $duplicates = 0;

  foreach($arr as $index => $value){

    foreach($arr as $i => $ref)
    {
      if($value == $ref){
        $duplicates++;
       }
    }
  }

  return ($duplicates < 1 ? true : false);
}


check_duplicate($arr);
check_duplicate($arr2);

この場合、両方の言語での最良の回答を教えてください。また、私がここで行っている間違いについてコメントすることもできます。解決策がたくさんある場合、私はそれに賞金をかけるかもしれません

ありがとう!

4

4 に答える 4

0

PHP: array_unique() を使用します。

function check_duplicate($arr) {
    return (count($arr) > count(array_unique($arr)) ? true : false;
}

Javascript: 私の知る限り、近道はありません。UnderscoreJS の _.uniq() を使用します。

function has_dup(arr) {
    return (arr.length > _.uniq(arr).length) ? true : false;
}
于 2013-11-11T06:04:40.340 に答える
0

PHP フレームワークで提供されているメソッドarray_key_existsまたはを使用してみてください。in_array

$newArray = array();
foreach($myArray as $key => $value) {
    //If I havent added this value, then add it..
    if(!in_array($value, $newArray)){
        $newArray[] = $value;
    }
}

JavaScript の場合jQuery.inArray()

于 2013-11-11T05:49:33.203 に答える
0

では、オリジナルのアイデアを使って、効率を上げてみましょう。まず、少なくとも 1 つの重複があるかどうかを調べようとしているだけの場合、最初の重複を見つけたらすぐに true を返す必要があります。関数の最後に到達すると、重複が見つからなかったと見なすことができます。次に、同じ要素を何度もチェックしようとしないでください。最初に一致しなかった場合、2 回目も一致しません。

Javascript の場合:

function has_dup(arr){
    var arr_len = arr.length;
    for(var i=0; i<arr_len; i++){
        var val = arr[i];
        for(var j=i+1; j<arr_len; j++){
            if(val === arr[j]){
                return true;
            }
        }
    }
    return false;
}

PHP の場合:

function check_duplicates($arr){
    $len = count($arr);
    for($i = 0; $i < $len; $i++){
        $val = $arr[$i];
        for($j = $i+1; $j<$len; $j++){
            if($val == $arr[$j]){
                return true;
            }
        }
    }
    return false;
}

PHP では、一意の配列を作成してサイズの違いを確認することもできます。

function check_duplicates($arr){
    return count(array_unique($arr)) != count($arr);
}
于 2013-11-11T05:56:51.463 に答える