序言:第一次听到这个算法感觉这个名字很有意思,甚至感觉到很高大上,仔细一看其实以前也看到过,就是字符串的三重反转算法,只是不知道它的这个高大上的名字。
手摇算法具体是啥?
首先抛出一个问题:反转字符串中两块元素的位置,该怎么做?
可能有的人会说,没问题,我们在开辟一块内存保存一部分的元素块,然后我们再复制两次就可以了。
但是如果加上限制空间复杂度只能是O(1),又该如何解决呢?
这时候就要用到手摇算法了。
手摇算法的处理方式非常的灵活,我们可以转换大小不均衡的元素块,那么他的原理该怎么解释呢?
举例:A B C D E F,我们要求A B和C D E F转换位置
1.我们先观察
根据上面的逆序交换的手段,我们怎么通过逆序交换的手段来实现位置的转换呢:
A B C D E F
C D E F A B
首先:我们推导一遍就明白了
A B C D E F
B A F E D C
C D E F A B (转换完成)
所以说算法存在三次反转的过程,实如其名:
1.反转前一段
2.反转后一段
2.反转整体
很明显我们的空间复杂度仅仅只是交换操作的t,O(1)实至名归。、
代码实现
public