您的位置:首页 > Web前端

(PHP实现剑指offer)数组中重复的数字

2018-03-05 22:16 225 查看
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

<?php

function duplicate($numbers, &$duplication)
{
// write code here
//这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
//函数返回True/False
/*思路:
因为在[0~n-1]的范围中,使每个数组下标对应每个值,比如
[2,3,1,0,2]->[1,3,2,0,2]->[3,1,2,0,2]->[0,1,2,3,2]以此下去,如果对应的值有两个,所以这就是对应重复的数
*/
$len=count($numbers);
if($len<=0){
return false;
}
for($i=0;$i<$len;$i++){
while($i!=$numbers[$i]){
if($numbers[$i]==$numbers[$numbers[$i]]){ //判断是否下标有对应的值了
$duplication[0]=$numbers[$i];
return true;
}
$temp=$numbers[$i];
$numbers[$i]=$numbers[$temp];
$numbers[$temp]=$temp;
}
}
return false;

}代码中尽管有一个两重循环,但是每个数字最多只交换两次就能找到属于它的位置,因为总的时间复杂度是O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: