[英]Best solution for finding duplicates in array
為了學習。 我找到了一個簡單的問題,但是我知道它有幾個解決方案,因為我想練習更多,並使用函數或常規方法找到問題的解決方案。
所以問題是這樣的
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);
鑒於這種情況,您可以給我兩種語言的最佳答案,也可以評論我在這里可能犯的錯誤。 如果有很多解決方案,我可能會賞金
謝謝!
這是我在PHP中使用的
/*
Scope of has_duplicate is to determine whether the passed array has duplicate values or not
@arguments $arr - array to be tested
@returns boolean value true/false
*/
function has_duplicate($arr){
return (count($arr) > count(array_unique($arr))) ? true: false;
}
請參閱array_unique並依靠官方文檔了解更多詳細信息。
嘗試使用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()
。
好的,讓我們采用您的原始想法並提高效率。 首先,如果您只是想弄清楚是否至少有一個重復項,一旦找到第一個重復項,應立即返回true。 如果您到達函數的結尾,則可以假定您沒有找到任何重復項。 其次,不要試圖一遍又一遍地檢查相同的元素。 如果第一次不匹配,則第二次不匹配。
對於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);
}
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.