右图中的强连通分量的个数为( )个。
强连通分量是指在有向图中,任意两点之间都存在一条从一个点到另一个点的有向路径,并且从另一个点也能到达第一个点的点集。
所以有3个,最左边一个,中间4个,右边1个
一个顶点自然是一个连通分量。因为它不需要任何路径,它肯定能到达自身。
考虑一个边界问题,为什么移动i
和j
指针的条件是q[i] < x
和q[j] > x
,而不是q[i] <= x
和q[j] >= x
?
原因如下:
x
是数组里最大的数,序列中所有的数都满足q[i] <= x
,会导致i
会一直++
发生越界都不会停下来。x
是数组里最小的数,同理q[j] >= x
恒成立,j
会一直--
发生越界。这也是造成快排不稳定的原因,排序算法是否稳定,与时间效率是否稳定无关。稳定是指若源序列中两个值相同的数,排序后这两个数的先后次序不会发生改变。
而快排中当边界点存在重复的数会交换位置。因此快排不稳定。
解决不稳定的方法:把序列中的数改成二元数,Ai
改成 <Ai, i>
,从而使所有的数都不相同。