问题描述
有两个数组 A 和 B 。并且 A 数组 = B 数组,现将 B 数组中的其中一个值随机去掉,求被去掉的值。
解决方案
<?php
$arr1 = array(1,2,3,4,5);
$arr2 = array(1,2,3,5);
for($i=0; $i<count($arr1); $i++){
$flag = false;
for($j=0; $j<count($arr2); $j++){
if($arr1[$i] == $arr2[$j]) {
$flag = true;
break;
}
}
if(!$flag)
echo $arr1[$i];
}
算法时间复杂度
信息标记
for($i=0; $i<count($arr1); $i++){//{1}
$flag = false; //{2}
for($j=0; $j<count($arr2); $j++){ //{3}
if($arr1[$i] == $arr2[$j]) {
$flag = true;
break;
}
}
if(!$flag) //{6}
echo $arr1[$i]; //{7}
}
计算过程
第一步:计算算法运行过程中运行的代码总的条数N:
N = n*n + n + n +1
n 代表{1}循环n次
{3} 过程中每条执行1次,所以得到 n*n
{2} 过程中 $flag = false 被赋值 n次,所以 +n
{6} 过程中 if(!$flag) 判断了 n 次,所以 +n
{7} 最后输出,所以 +1
第二步:计算算法总运行时间f(n):
f(n) = N * t = (n^2 + 2n +1) * t
第三步:计算时间复杂度T(n):
T(n) = O( f(n) ) = O( (n^2 + 2n +1) * t )
即
T(n) = O( (n^2 + 2n +1) * t )
第四步:简化
T(n) = O(n^2)