(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)
<?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)
相关文章推荐
- php实现数组重复数字统计实例
- 《剑指offer》-找到数组中重复的数字
- php利用array_flip实现数组键值交换去除数组重复值
- php数组对百万数据进行排除重复数据的实现代码
- 《剑指offer》3.数组中重复的数字
- PHP实现在指定数组中取指定数量不重复的子集合
- 剑指offer—数组中重复的数字
- Java实现找出数组中重复的数字
- PHP实现将MySQL重复ID二维数组重组为三维数组的方法
- 《剑指offer》——数组中重复的数字
- 剑指offer 数组中重复的数字
- 剑指OFFER(java)-数组中重复的数字
- 编程实现删除数组中在重复数字
- 《剑指Offer》学习笔记--面试题51:数组中重复的数字
- 数组中重复的数字(剑指offer)+时间复杂度O(n)空间复杂度O(1)的想法
- php实现在指定数组中取指定数量不重复的子集合
- 数据结构与算法分析笔记与总结(java实现)--数组8:数组中重复的数字
- 数组中重复的数字(剑指offer)
- 剑指offer - 面试题51:数组中重复的数字
- <剑指offer 面试题3> 数组中重复的数字(Java实现)