路径压缩的活用

版权声明:转载请标明出处 https://blog.csdn.net/kumu28/article/details/79423571

题目大意:有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;

        

猜你喜欢

转载自blog.csdn.net/kumu28/article/details/79423571