日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

php – 這個函數(shù)如何從數(shù)組返回第一個dupe?

 印度阿三17 2019-07-01

我在Code-Signal上找到了一個任務(wù)(或更像是一個挑戰(zhàn))(一個你可以做一些編程相關(guān)任務(wù)的網(wǎng)站.谷歌在一次采訪中詢問了這個特殊任務(wù):

如果你想自己嘗試一下:Code-Fight.

解決問題后,您可以看到其他解決方案.

我的任務(wù)是“在數(shù)組中找到第一個欺騙”.我設(shè)法做到這一點(diǎn)(我將展示方式),但我對結(jié)果不滿意.在調(diào)查了頂級解決方案之后,我很困惑,因為我不明白它們在那里發(fā)生了什么.

這是(a)給出的示例輸入數(shù)組

$a = [2, 1, 3, 5, 3, 2]

我的解決方案

function firstDuplicate($a) {

    $onlyDupesArray= array();
    $countedValues = array_count_values($a);

    // remove all entries which are only once in the array
    foreach($a as $k => $v) {
        if($countedValues[$v] > 1) {
            $onlyDupesArray[$v] = $v;
        }
    }

    // get rid of dupes
    $uniqueDupesArray = array_unique($onlyDupesArray);
    $firstEncounter = PHP_INT_MAX;

    foreach($uniqueDupesArray as $k => $v) {
        if(array_keys($a, $v)[1] < $firstEncounter) {
            $firstEncounter = array_keys($a, $v)[1];
        }
    }

    if(is_null($a[$firstEncounter])) {
        return -1;
    } else {
        return $a[$firstEncounter];
    }
}

它適用于每個測試用例,我解決了挑戰(zhàn).然而,最重要的解決方案是:

function firstDuplicate($a) {
    foreach ($a as $v)
        if ($$v  ) return $v;
    return -1;
}

我知道variable variable是什么,但直到現(xiàn)在還沒有在野外生活中看到過這一點(diǎn).

引用變量在這里做什么?這是怎么回事的?它是否以某種方式比較是否已存在此鍵入鍵的值? $$v引用數(shù)組中的鍵嗎?

不用說,我更喜歡這種方法.這似乎更有效,更好地維護(hù).

這是“常見做法”嗎?

解決方法:

它正在創(chuàng)建編號變量. 2美元,1美元,3美元等

foreach中的$v包含當(dāng)前數(shù)字,2.通過$test = 2; echo $$test我們現(xiàn)在可以看到2美元的價格.它通常是空的.現(xiàn)在,通過執(zhí)行$$v,它將返回當(dāng)前值(空,或?qū)嶋H上,變量不存在),但會將“1”放入其中.整個語句本身將返回0,因為它不在變量的前面.

考慮以下代碼:

$arr = [2, 1, 3, 5, 3, 2];
foreach($arr as $v) 
{
  $$v  ;
}
$test = 3; 
echo $$test;

它將顯示$3的值等于2,因為我們在$3上做了2次.

這很奇怪的唯一原因是通常你不能使用以數(shù)字開頭的變量.也許這會讓它更清晰?:

$arr = [2, 1, 3, 5, 3, 2]; 
foreach($arr as $v) 
{
  $v='a'.$v;
  $$v  ;
}
echo "a3 = $a3\n"; // 2
echo "a2 = $a2\n"; // 2
echo "a1 = $a1\n"; // 1
echo "a5 = $a5\n"; // 1

回答“這是”常見做法“?”的問題.不,我個人不會使用變量變量,因為在某些情況下這可能被視為安全問題.我個人更喜歡以下解決方案,它是相同的,但使用數(shù)組,并沒有拋出通知:

function firstDuplicate($a) {
    $arr = []; 
    foreach ($a as $v) 
        if (in_array($v, $arr))
            return $v; 
        else
            $arr[] = $v; 
    return -1; 
}

不過,變量解決方案是一個創(chuàng)新的解決方案!

來源:https://www./content-1-286701.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多