塔子哥刚刚获得了一个长度为n排列,他知道什么是排列,但是今天他想在这个大的排列当中取出一
个小的排列出来,塔子哥可以选择两个位置,然后交换这两个位置的数,可是他很懒,他最多只能交
此题的要求是在一个排列中找到一个长度为k的连续字段也是一个排列,并且最多交换一次,这一个连续字段的排列不一定是顺序,也有可能是顺序的,我们知道一个长度为k的排列数字一定是从1到k,在这一整个大排列中1到k也只会出现一次,那么我们就可以针对1到k的数出现的位置做考虑,先将1到k的数出现的位置记录下来并且排序,若是相邻的出现位置相差均为1,那么显然这k个数都是相邻的。
若是交换一次才能使所有位置相邻,那么便找到第一个不相邻的位置,这个位置是要交换的,另一个位置一定在出现位置最后或最前,当然前提是假设通过一次交换可以使所有位置相邻,所以可以通过检查前k-1个数出现的位置和后k-1个数是否只缺少1个位置使之连续来判断,具体请看代码,若是这两个条件均不能满足那么就无法通过1次交换使之连续。