Arrays 什么';这是在Ruby中操作数组最有效的方法
我正在努力提高以下代码的效率,但没有任何想法,因此正在寻求帮助: 我收到一个区间Arrays 什么';这是在Ruby中操作数组最有效的方法,arrays,ruby,Arrays,Ruby,我正在努力提高以下代码的效率,但没有任何想法,因此正在寻求帮助: 我收到一个区间x和一个整数数组space,我需要将space数组分成x区间的段,例如 space = [1, 2, 3, 1, 2] x = 2 # The intervals Would be [1, 2][2, 3][3, 1][1, 2] 然后我需要找到每个区间的最小值,然后找到最小值的最大值,在上面的例子中,最小值是: [1, 2, 1, 1] 然后我需要返回最小值的最大值,即2 下面是我的解决方案,大多数测试用例都通
x
和一个整数数组space
,我需要将space
数组分成x
区间的段,例如
space = [1, 2, 3, 1, 2]
x = 2
# The intervals Would be
[1, 2][2, 3][3, 1][1, 2]
然后我需要找到每个区间的最小值,然后找到最小值的最大值,在上面的例子中,最小值是:
[1, 2, 1, 1]
然后我需要返回最小值的最大值,即2
下面是我的解决方案,大多数测试用例都通过了,但其中一些测试用例失败了,因为超出了执行时间。你知道如何使下面的代码更高效吗
def segment(x, space)
minimums = {}
space.each_with_index do |_val, index|
# 1 Create the segment
mark = x - 1
break if mark >= space.length
segment = space[index..mark]
x = x + 1
# 2 Find the min of the segment
minimum = segment.min
minimums[index] = minimum
end
# Compare the maximum of the minimums
return minimums.values.max
end
我尝试将
最小值
作为散列而不是数组,但没有成功。我还以为我会将空间
数组转换为散列,并操作散列而不是数组,但我认为这将更加复杂…您不需要收集片段并在以后处理它们。只需在阵列中行走一次,在行走过程中保持每个分段的最大最小值
而且每个带有索引的\u都是一种浪费。只需自己走阵列,连续切片即可
简单的例子:
初始条件
空格=[1,2,3,1,2]
x=2
#我们开始
min=space.min
(0..space.length-x)。每个do|i|
min=[空间[i,x].min,min].max
结束
普敏
和往常一样,在ruby中,总是有一种更优雅的方式。例如,不需要创建切片;让ruby来做(每一项都有它的缺点
):
初始条件
空格=[1,2,3,1,2]
x=2
#我们开始
min=space.min
空间。每个_cons(x)做|切片|
最小值=[slice.min,min].max
结束
普敏
当然,一旦您了解了这是如何工作的,就可以进一步完善它(例如,如下面的评论所示)。您不需要收集片段并在以后处理它们。只需在阵列中行走一次,在行走过程中保持每个分段的最大最小值 而且
每个带有索引的\u都是一种浪费。只需自己走阵列,连续切片即可
简单的例子:
初始条件
空格=[1,2,3,1,2]
x=2
#我们开始
min=space.min
(0..space.length-x)。每个do|i|
min=[空间[i,x].min,min].max
结束
普敏
和往常一样,在ruby中,总是有一种更优雅的方式。例如,不需要创建切片;让ruby来做(每一项都有它的缺点
):
初始条件
空格=[1,2,3,1,2]
x=2
#我们开始
min=space.min
空间。每个_cons(x)做|切片|
最小值=[slice.min,min].max
结束
普敏
当然,一旦你了解了它是如何工作的,就可以对它进行进一步的改进(例如,如下面的评论所示)。你也可以编写
空格。每个空格都包含(2).max\u by(&:min).min
。正如我所说,总有一种更优雅的方式!您还可以编写空格。每个空格都包含(2).max\u by(&:min).min
。正如我所说,总有一种更优雅的方式!