一道算法题的趣味解法
最近在 Leetcode 上看到的,给人眼前一亮的感觉。
题目
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
标准解法
function containsDuplicate($nums) {
foreach($nums as $val){
if($repeat[$val] != ''){
return true;
}else{
$repeat[$val] = $val;
}
}
return false;
}
趣味解法
原理:掷两个骰子,次数足够多,有相同的话,说明是有重复的。
function containsDuplicate($nums) {
$total = count($nums);
for ($i=0; $i < 100000; $i++) {
$a = mt_rand() % $total;
$b = mt_rand() % $total;
if($a != $b && ($nums[$a] == $nums[$b])){
return true;
}
}
return false;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
array_unique 然后判断长度 和楼上的接法思路差不多
你这算是猴子算法嘛 :speak_no_evil: :speak_no_evil: