给定一个N个数字列表(1个索引),如果连续块具有多于K个连续出现的相同元素,则它是K有序块。
示例:[2,4,4,5,5,5,3,3]具有从索引4到6的3顺序块和从7到6的2顺序块8. 4到6的块也是2阶块。
现在,如果给出形式查询: LeftIndex,RightIndex,Order-K
我们需要告诉LeftIndex和RightIndex存在多少Order-K块。
如果查询类型为2,8,2,则回答为3,因为3个块与订单2相同。它们从索引2到3,4到6,7到8。
如果查询最多为100000,如何解决此问题,列表可以是100000。
答案 0 :(得分:0)
你应该展示你所做的和你的想法。请参阅tour
包含有关您尝试过的内容以及您尝试执行的操作的详细信息。
算法非常简单。
使用i = leftIdx - 1
开始循环,跳过并计算所有等于list[i]
的下一个元素(使用while()
循环)。如果相同元素的数量(包括list[i]
)大于或等于K
,则会找到新的Order-K
块。现在将i
更新为i+count
,然后继续循环直到i > rightIdx
。
请注意角落案例(空列表,rightIdx< = leftIdx等)和IndexOutOfBound
例外。