考虑固定范围内的一维数字序列,即
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
不断增长的图形* **是一条线,该线从左到右连接此序列中的所有点,并且始终向上或保持水平。如有必要,该线从上到下环绕,并从那里继续向上到达下一个点。
这项挑战的目标是将序列分成所有不递减的不同子序列,以便与有限的垂直轴一起绘制时,它们将形成一个不断增加的图。这是通过在一个子序列的末尾和下一个子序列的末尾添加一个点来完成的,以便与顶部边界相交的线的角度与与底部边界相交的线的角度对齐,并且两个交叉点具有相同的水平坐标。上面的示例将给出以下输出:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
相应的图将如下所示: 并延伸轴以获得更好的视图: 所需的输出是构成“不断增加的图”各部分的子序列的列表。进行绘图不是必需的,但是会为您赢得积分;)。输出必须以某种方式清楚地分隔子序列。
笔记
- 范围的左边界(包括边界)始终为零,右边界为整数N。
- 该序列将永远不会包含不在范围内的值。
- 第一个子序列在开始时没有附加点。
- 最后一个子序列在末尾没有额外的点。
- 不需要提供绘制子序列所需的起始索引。
测试用例
Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]
计分
这是代码高尔夫球,以字节为单位的最短代码获胜。
*不是实际的行话**如@ngm所指出的,实际上应称为Ever Non-Decreasing Graph,但这听起来不那么令人印象深刻。