2018搜狐内推笔试编程题1

本文介绍了搜狐内推笔试中的一道编程题,涉及Kolakoski序列的生成方法。通过理解序列的定义,即序列中的元素长度形成自身,举例说明了如何根据给定初始数组生成对应的Kolakoski序列,并提供了详细的解题思路和步骤。
摘要由CSDN通过智能技术生成

输入:两行数据

第一行包括n和m,空格隔开,n表示输出Kolakoski序列的前n项,m表示给定数组的长度

第二行m个数字,表示给定的数组元素

输出:n行

输出Kolakoski序列的前n项



这个题的首要的一点是要理解题目的意思,什么是Kolakoski序列以及怎么求?

第一,Kolakoski序列是基于一个初始序列的

第二,Kolakoski序列中的元素按照相邻的元素分为一组,每组求其长度得到是它本身


那么,我们怎么根据给定的初始数组得到对应的Kolakoski序列呢?

我们举个例子说明一下:

假设给定的初始数组是[2,3],因为初始数组的第一个元素为2,所以Kolakoski序列前2个元素为[2,2],

接下来,我们定义2个指针,一个指针a指向初始数组的第二个元素3,另一个指针b指向Kolakoski序列的第二个元素2,

我们看指针b指向2,a指向3,所以我们往Kolakoski序列中加入2个3,Kolakoski序列变为[2,2,3,3]

之后b指针继续指向下一个元素3,a指针指向2(a指针循环指向初始数组的每个值),所以我们往Kolakoski序列中加入3个2,Kolakoski序列变为[2,2,3,3,2,2,2]

……

重复上述步骤,直到Kolakoski序列中的元素大于n即可。

这里有一点比较特殊:当初始数组的第一个元素为1时,Kolakoski序列为[1],接下来我们还要根据初始数组的第二个值往Kolakoski序列添加元素。

下面我们看代码:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int m = in.nextInt();
            int[] a = new int[m];
            in.nextLine();
            for(int i=0;i<m;i++)
                a[i] = in.nextInt();
            List<Integer> list = new ArrayList<>();           
            int index1 = 0;
            int index2 = 0;
            while(list.size() < n){
            	if(index2 == list.size()){                   
            		for(int i=0;i<a[index1];i++)
            			list.add(a[index1]);
            	}else{
            		for(int i=0;i<list.get(index2);i++)
                        list.add(a[index1]);
            	}
                index2++;
                index1 = (index1+1)%a.length;
            }
            for(int i=0;i<n;i++)
                System.out.println(list.get(i));
        }
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值