给定一个包含 n 个整数元素的向量,如何设计更高效的算法以产生最小数量的转换步骤,使得向量的所有元素都相等,已知:
- 在单个步骤中,您最多可以将一个点从一个元素传输到其相邻元素([0,3,0] -> [1,2,0] 可以,但不是 [0,3,0] -> [1,1,1])。
- 在单个步骤中,一个元素可以接收两个点:一个来自左侧的相邻元素,另一个来自右侧的相邻元素([3,0,3] -> [2,2,2])。
- 第一个元素和最后一个元素分别只有一个相邻元素,即第二个元素和第 n-1 个元素。
- 任何一步中,元素不能为负数。
示例:
Given :
0, 3, 0
Then 2 steps are required :
1, 2, 0
1, 1, 1
Given :
3, 0, 3
Then 1 step is required :
2, 2, 2
Given :
4, 0, 0, 0, 4, 0, 0, 0
Then 3 steps are required :
3, 1, 0, 0, 3, 1, 0, 0
2, 1, 1, 0, 2, 1, 1, 0
1, 1, 1; 1, 1, 1, 1, 1
我的当前算法基于元素两侧整数之和。但我不确定它是否会产生最小步骤。
顺便说一下,这个问题是一个代码竞赛的一部分(由Criteo创建 http://codeofduty.criteo.com),已经结束了。