PHP 找到最小半径 使得至少k个点位于圆内(Find minimum radius such that atleast k point lie inside the circle)

 给定一个正整数 K,一个圆心在 (0, 0) 处,以及一些点的坐标。任务是找到圆的最小半径,使得至少 k 个点位于圆内。输出最小半径的平方。 

PHP 找到最小半径 使得至少k个点位于圆内(Find minimum radius such that atleast k point lie inside the circle)_第1张图片

例子:  

输入:(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 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。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

你可能感兴趣的:(PHP,php)