我在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
|