数值近邻问题

一个 无序 数组中各个数互不相同  ,a 是数组中的一个数 ,求与 a 最接近的 k 的数


1。最笨的算法 ,排序 ,然后a两边找  

2。转变思路 ,其实求所有与 a 的 绝对差的前 k 个数


则可得到 


先将数组  for( x: x[]) x=|x-a|

利用  select  算法  (算法导论  O(n) )

可以找第  k+1 小个数 :Y,则  对于原数组的数  只要他和a的绝对值小于等于  Y ,就是我们所找的数

 

 

//绝对值
x_bak=new []
for( x: x[])  {
x=|x-a|
x_bak[]=x;
}


//找到第k+1 小的数
Y=select(x_bak,k+1);

//所有差小于 y ,和a 也是 k 接近
for(x:x[])  {
x=|x-a|
if(x<=y)
result[]=x;
}

return result;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值