Lyft 店面

面试在coderpad上,面完以后还得run 几个test。
题目是implement一个multistream class。 这个class有3个funciton:

  1. Add, 输入是一个integer list,把这个list里的数字加到这个class里, return void。
  2. Remove, 输入是一个integer list, 把这个list从class里移除, return void。
  3. Read, 输入是一个integer n, 这个function需要从之前加过的那些list里面读n个数字。 如果没有足够的数字就有多少读多少,返回integer list。

栗子:

ms = new MultiStream();

ms.add(newArrayList<Integer>(Arrays.asList(1,2,3,4)));

ms.add(newArrayList<Integer>(Arrays.asList(5,6,7)));

ms.read(3) -> 返回[1,2,3]

ms.remove(new ArrayList<Integer>(Arrays.asList(4)));

ms.read(2) -> 返回[5,6]

ms.read(2) -> 返回[7]

没啥太fancy的算法, bruteforce应该就是最优解,注意好index就行了。

这个题目在另外一个面经也看到了,但是有几点不是很清楚。
是在class里面维护一个list,同时维护当前读到的idx。
call add(target),就把target里的数字append到这个list里,call remove(target),就把target里的数字从list里remove么?
这个remove的逻辑不是很清楚。
是从list的最左边开始遍历,找到值相等的就remove么?还是从idx开始遍历呢?
如果是按照值相等来remove,如果有duplicate,remove第一个?

比如这个例子:

add([1,4,3,4])                  #list=[1,4,3,4],idx=0
add([5,6,7])                    #list=[1,4,3,4,5,6,7],idx=0
read(3) -> [1,4,3]            #list=[1,4,3,4,5,6,7],idx=3
remove([4])                     #list becomes [1,3,4,5,6,7] or [1,4,3,5,6,7]? If former, idx should reset to 2. If latter, idx is still 3.

求lz详解