Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 什么';这是在Ruby中操作数组最有效的方法_Arrays_Ruby - Fatal编程技术网

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
。正如我所说,总有一种更优雅的方式!