带权中位数结论及两种解法

有若干个排列在一条直线上的点pi,每个点上有ai个人找出一个人使所有的人移动到这个人的位置上的总距离最小;

对于这道题有个结论:是人数刚刚过半的点就是我们要寻找的点

证明就如上图:我们假设第Px个点就是我们要寻找的目标点,Px-1及其左边的点都要少走一段长度为len的长度,而对于Px及其右边的点都要多走一段长度为len的长度;

由此我们可以由上从走后一个点进行枚举设q为其枚举的位置我们可以发现在Pq还未刚刚过半的时候我们求的距离是一直在减小的而当Pq过半之后我们求的距离是一直在增大的,呢我们就成功的证明出了带权中位数的结论;

第一种解法是利用了上面的公式而第二种解法则是利用了第一种的思路;

第二种解法:我们可以先暴力算出所有的点到第一个点的距离和,然后根据第一个点来求出他的相邻点的距离;

推导公式如下:dx+1=dx+(Px+1-Px)*(x及其之前的所有人-x+1及其之后的所有人);

这个求x及其之前的所有人可以用前缀和,x+1及其之后的所有人可以用所有人减去x及其之前的人数;

这样我们只用暴力求出所有人到第一个点的距离就可以以此推出之后的每个点,可以实现o(1)的复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值