搜狐_Kolakoski序列
第一道题的大致思路是:Kolakoski序列变换后还是Kolakoski序列本身。那么就需要有两个索引变量,一个是Kolakoski序列索引k_index,一个是变换后的Kolakoski序列所以c_index。因为变换前后都是同一个串,所以可以就在一个Kolakoski序列上进行构造操作。也就是说,当前Kolakoski序列的第i个同数字构成子串的长度将成为变换后的Kolakoski序列中的第i个数字(也就是多对一),换而言之,变换后的Kolakoski序列的数对应变换前的Kolakoski序列的子串长度。
给定的数组a[]={1,2},那么开始构造:(粗略思路如下)
1) 不断循环地依次从a中取数,用索引index代表即为a[index];
2) 如果Kolakoski序列空,则直接添加a[index]进入Kolakoski序列,否则判断当前取的数a[index]和现在构造的Kolakoski序列的最后一个数是否相同值,如果相同,则index++(判断越界,若越界则index=0),否则就将这个值赋给Kolakoski序列,此时操作k_index++。
3) 然后进行Kolakoski[c_index] - 1次循环讲现在的a[index]数添加进去(即Kolakoski[k_index] = a[index]; k_index++),当k_index == n时,输出这个Kolakoski序列。
4) index++并判断是否越界,c_index++。这样不断循环上述步骤,就能求出Kolakoski序列了。
(PS:最后改出隐藏的一个bug时,提交后编译被中断,进入交卷模式,也不知道最后AC没,等放出这道题后在提交一次看看)
#搜狐##Java工程师#