路径压缩的活用

题目大意:有n个板凳,m个人,每个人都有一个想坐的位置。为了体现先到先得的道理,先到的人会坐在他想坐的位置上,

                后到的人只能选择向后移动直到有空位坐下。问那些座位上坐了人。(0<=m<=n<=1e5)

input:

        8 4

        1 2 1 5

output:

        1 1 1 0 1 0 0 0

分隔线---------------------------------------------------------------------

解法1:暴力模拟   O(n^2) 凉凉;

解法2:

        对暴力模拟的过程进行分析,不难发现其中大量的时间复杂度来自 搜索空位。即每一个人都要从他想坐的位置向后遍历。

据此,不难想到不如在每个位置记上最近空位的下标,这样就能省去遍历的时间。但仔细一想好像维护这个数组所花费的时间复

杂度也是 n。因为每加入一个人,都要更新数组。ag.样例:

            第一个人:vis 2 2 3 4 5 6 7 8

            第二个人:vis 2 3 4 4 5 6 7 8

            第三个人:vis[0]=2;跳到vis[1]=3;再跳到vis[2]=4;mp[3]=0,这才结束跳跃;

            这个跳跃的过程可以类比并查集的查找过程,用路径压缩刚好可以简化,将时间复杂度降到 n*logn;

        

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值