php程序在数组中查找最接近的数字
给定一个有序整数数组。我们需要找到最接近给定数字的值。数组可能包含重复值和负数。
例子:
Input : arr[] = {1, 2, 4, 5, 6, 6, 8, 9}
Target number = 11
Output : 9
9 is closest to 11 in given array
Input :arr[] = {2, 5, 6, 7, 8, 8, 9};
Target number = 4
Output : 5
一个简单的解决方案是遍历给定的数组并跟踪当前元素与每个元素的绝对差异。最后返回具有最小绝对差的元素。
一个有效的解决方案是使用二分搜索。
PHP
= $arr[$n - 1])
return $arr[$n - 1];
// Doing binary search
$i = 0;
$j = $n;
$mid = 0;
while ($i < $j)
{
$mid = ($i + $j) / 2;
if ($arr[$mid] == $target)
return $arr[$mid];
/* If target is less than array element,
then search in left */
if ($target < $arr[$mid])
{
// If target is greater than previous
// to mid, return closest of two
if ($mid > 0 && $target > $arr[$mid - 1])
return getClosest($arr[$mid - 1],
$arr[$mid], $target);
/* Repeat for left half */
$j = $mid;
}
// If target is greater than mid
else
{
if ($mid < $n - 1 &&
$target < $arr[$mid + 1])
return getClosest($arr[$mid],
$arr[$mid + 1], $target);
// update i
$i = $mid + 1;
}
}
// Only single element left after search
return $arr[$mid];
}
// Method to compare which one is the more close.
// We find the closest by taking the difference
// between the target and both values. It assumes
// that val2 is greater than val1 and target lies
// between these two.
function getClosest($val1, $val2, $target)
{
if ($target - $val1 >= $val2 - $target)
return $val2;
else
return $val1;
}
// Driver code
$arr = array( 1, 2, 4, 5, 6, 6, 8, 9 );
$n = sizeof($arr);
$target = 11;
echo (findClosest($arr, $n, $target));
// This code is contributed bu Sachin.
?>
输出:
9
有关详细信息,请参阅有关在数组中查找最接近的数字的完整文章!