将数组数目转化为始终为奇数个

让数组恒为奇数
有没有办法让两个数组长度相加一定为奇数或偶数呢?

其实有的,虚拟加入‘#’(这个trick在manacher算法中也有应用),让数组长度恒为奇数(2n+1恒为奇数)。 
Ps.注意是虚拟加,其实根本没这一步,因为通过下面的转换,我们可以保证虚拟加后每个元素跟原来的元素一一对应

之前         len    之后                    len
[1 4 7 9]    4     [# 1 # 4 # 7 # 9 #]       9
[2 3 5]      3     [# 2 # 3 # 5 #]           7


映射关系
这有什么好处呢,为什么这么加?因为这么加完之后,每个位置可以通过/2得到原来元素的位置。

/    原位置    新位置    除2后
0      1         0        1
5      2         5        2


--------------------- 
作者:Vosky 
来源:CSDN 
原文:https://blog.csdn.net/hk2291976/article/details/51107778 

猜你喜欢

转载自blog.csdn.net/ailaojie/article/details/84989978