Haskell:频繁值

Haskell:频繁值,haskell,segment-tree,Haskell,Segment Tree,我正在尝试使用段树来解决这个问题 博客文章使用了类似的方法 我想将列表拆分为以下间隔: -1-111010变成(0,2)(2,6)(6,7)、(7,10) 我有一个代码: g s = map (\x->(head x, length x)) . group . sort $ s 但它没有给出正确的输出 也可以使用频繁值吗?我会尽可能地使用它 f = neighbors . prefixSums . counts where counts = map length . grou

我正在尝试使用段树来解决这个问题

博客文章使用了类似的方法

我想将列表拆分为以下间隔:

-1-111010
变成
(0,2)(2,6)(6,7)、(7,10)

我有一个代码:

g s = map (\x->(head x, length x)) . group . sort $ s
但它没有给出正确的输出

也可以使用频繁值吗?

我会尽可能地使用它

f = neighbors . prefixSums . counts
  where
    counts = map length . group . sort
    prefixSums = scanl (+) 0
    neighbors xs = zip xs (tail xs)
首先计算元素的
计数,这样您的
[-1,-1,1,1,1,1,1,3,10,10,10]
的(任意排列)就变成了
[2,4,1,3]

然后,
prefixesums
计算前缀的和,因此我们得到了运行示例的
[0,2,6,7,10]

为了得到最终结果,我们只需获取该列表中连续的
邻居

我会照你说的做

f = neighbors . prefixSums . counts
  where
    counts = map length . group . sort
    prefixSums = scanl (+) 0
    neighbors xs = zip xs (tail xs)
首先计算元素的
计数,这样您的
[-1,-1,1,1,1,1,1,3,10,10,10]
的(任意排列)就变成了
[2,4,1,3]

然后,
prefixesums
计算前缀的和,因此我们得到了运行示例的
[0,2,6,7,10]


为了得到最终结果,我们只需获取该列表中连续的
邻居

你能帮我理解这篇博客文章吗?你能帮我理解这篇博客文章吗?