我在一个处理子序列的编码挑战网站上遇到了一个问题。
给定一个整数元素数组,这个数组的子序列是数组中的一组连续元素(即:给定数组v:[7, 8, -3, 5, -1],v的子序列是8, -3, 5)
你的任务是编写一个函数,找到满足以下条件的数组的左子序列和右子序列:
两个子序列必须是唯一的(它们没有共享元素)
右子序列元素之和与左子序列元素之和之差最大
将差异打印到标准输出 (stdout)
该函数接收array,它是一个整数数组。
数据限制:
该数组至少有 2 个,最多 1,000,000 个数字
数组中的所有元素都是以下范围内的整数:[-1000, 1000]
例子
Input: 3, -5, 1, -2, 8, -2, 3, -2, 1
Output: 15
在上面的例子中,左子序列是[-5, 1, -2],右子序列是[8,-2,3]
(8 + -2 + 3) - (-5 + 1 + -2) = 9 - -6 = 15
这是我尝试过的
def maximum_difference(array)
sequences = array.each_cons(3).to_a
pairs = sequences.each_cons(2).to_a
pairs.select{|pair|pair[0]+pair[1].length != pair[0] + pair[1].uniq.length}
pairs.map{|values|values.reduce(:+)}.sort{|max, min| max - min}
end
但看起来这不起作用。