确定给定数组中连续相等元素的最大数量

Posted

技术标签:

【中文标题】确定给定数组中连续相等元素的最大数量【英文标题】:Determine the maximum number of consecutive equal elements in a given array 【发布时间】:2016-06-23 21:20:12 【问题描述】:

arr = [1, 1, 1, 1, 1, 2, 3, 3, 3, 4, 4, 1, 1]
def recurring(arr)
    freq = arr.inject(Hash.new(0))  |h,v| h[v] += 1; h 
    freq.max_by  |k,v| v 
end

重复出现(ar

【问题讨论】:

您希望吗?如果是这样,您的第一句话是不正确的,并且您的代码不相关,因此具有误导性。您需要编辑问题以阐明您想要做什么。 【参考方案1】:

这应该可以工作

def recurring(arr)
  elements = arr.uniq
  elements.map  |el| arr.count(el) .max
end

【讨论】:

【参考方案2】:

我假设任务是确定给定数组中连续相等元素的最大数量。

def recurring(arr)
  arr.chunk(&:itself).map  |_,a| a.size .max
end

arr = [1, 1, 1, 1, 1, 2, 3, 3, 3, 4, 4, 1, 1]
recurring arr
  #=> 5

Object#itself 是在 Ruby v2.2 中引入的。对于早期版本,写

arr.chunk  |e| e .map  |_,a| a.size .max

步骤:

enum = arr.chunk(&:itself)
  #=> #<Enumerator: #<Enumerator::Generator:0x007fbb04943088>:each> 

我们可以通过将枚举器转换为数组来查看它会生成哪些元素:

enum.to_a
  #=> [[1, [1, 1, 1, 1, 1]], [2, [2]], [3, [3, 3, 3]], [4, [4, 4]], [1, [1, 1]]]

b = enum.map  |_,a| a.size 
  #=> [5, 1, 3, 2, 2] 
b.max
  #=> 5 

【讨论】:

以上是关于确定给定数组中连续相等元素的最大数量的主要内容,如果未能解决你的问题,请参考以下文章

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

查找最多具有 k 个奇数元素的不同连续子数组的数量

算法题:最大连续子数组选择

P2253 好一个一中腰鼓!

最大连续子序列和

将数组分成更小的连续部分,使 NEO 值最大