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

 给定一个正整数 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。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值