受Stack Overflow 问题的启发。
给定整数的非空数组x
和一个正整数n
,计算总和的每一个滑动块长度的n
沿阵列x
,圆在左边与值从右侧填充缺失的值如下:
- 第一个块包含的第一个条目
x
,后跟n-1
循环移位的条目; - 第二个块具有的第一个和第二个条目
x
,后跟n-2
循环移位的条目;等等。
输出数组y
的大小与相同x
。可能n
超过的长度x
,然后x
循环重复使用的值几次。
例子
示例1(值仅重用一次)
x = [2, 4, -3, 0, -4]
n = 3
作为输出
y = [-2, 2, 3, 1, -7]
哪里
-2
是块的总和[0, -4, 2]
(前两个值来自循环移位)2
是的总和[-4, 2, 4]
(第一个值来自循环移位)3
是的总和[2, 4, -3]
(不再需要循环移位)1
是...的总和[4, -3, 0]
-7
是的总和[-3, 0, -4]
。
示例2(值被重用几次)
x = [1, 2]
n = 5
给
y = [7, 8]
哪里
7
是该块的总和[1, 2, 1, 2, 1]
(前四个值已循环使用)8
是该块的总和[2, 1, 2, 1, 2]
(前三个值已循环使用)
附加规则
- 该算法应适用于任意大小的数组和任意整数值。如果程序受到数据类型或内存限制的限制,则可以接受;但是必须处理正整数和负整数。
- 输入/输出可以通过任何合理的方式获取/产生。
- 允许使用任何编程语言编写程序或功能。禁止出现标准漏洞。
- 以字节为单位的最短代码获胜。
测试用例
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]