给定一个正整数 K,一个圆心在 (0, 0) 处,以及一些点的坐标。任务是找到圆的最小半径,使得至少 k 个点位于圆内。输出最小半径的平方。
例子:
输入:(1, 1), (-1, -1), (1, -1),
k = 3
输出:2
我们需要一个半径至少为 2 的圆来包含 3 个点。
输入:(1, 1), (0, 1), (1, -1),
k = 2
输出:1
我们需要一个半径至少为 1 的圆来包含 2 个点。以 (0, 0) 为圆心、半径为 1 的圆将包含 (1, 1)和 (0, 1)。
其思路是求出每个点到原点 (0, 0) 的欧氏距离的平方。然后,按升序对这些距离进行排序。距离的第 k个元素就是所需的最小半径。
以下是该方法的实现:
<?php
// PHP program to find minimum radius
// such that atleast k point lie inside
// the circle
// Return minimum distance required
// so that atleast k point lie
// inside the circle.
function minRadius($k, $x, $y, $n)
{
$dis =array();
// Finding distance between
// of each point from origin
for ($i = 0; $i < $n; $i++)
$dis[$i] = $x[$i] * $x[$i] +
$y[$i] * $y[$i];
// Sorting the distance
sort($dis);
return $dis[$k - 1];
}
// Driver Code
$k = 3;
$x = array(1, -1, 1);
$y = array(1, -1, -1);
$n = count($x);
echo minRadius($k, $x, $y, $n) ;
// This code is contributed by anuj_67.
?>
输出:
2
时间复杂度: O(n + nlogn)
辅助空间: O(n)ve。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。