假设已知序列有N个值 包含n个0跟m个1
那排好的序列会长成 [0..n个..01..m个1..1]
我的想法是
从最初的序列去看 最少要做多少次0&1的swap才会得到排好的序列
Ex1: a[1 0 0 1 0] => 一次 swap(a[0],a[4]) 就好了
Ex2: a[1 0 1 0 0] => 两次 swap(a[0],a[4]), swap(a[2],a[3])
每一个swap 就用两个数字去存 ex: (0,4) (2,3)
这样记录所需要的内存 = min(n, m)*2
大部分的情况都会 < N
只有最坏的情况 就是0跟1的数量相同 然后排列完全相反 (ex: 111000)
所需要的空间刚好等于 (N/2) * 2 = N
解决这个问题方法很多 你可以拿一个特殊的值去记录这种情况=.=