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]
为了得到最终结果,我们只需获取该列表中连续的邻居 你能帮我理解这篇博客文章吗?你能帮我理解这篇博客文章吗?