假设我有一个数字数组(表示cron作业应运行的分钟数:]]
let arr = ['21', '23', '25', '59', '10']
我想在此数组arr
中插入一个新数字,但我要确保它与该频谱中已经存在的任何两个数字相距最远。
直觉上我可以说它应该在44左右,但是我如何将其编程为算法?
我知道这个问题有点笼统,但是对于自动计划cronjobs很有用,这样它们就不会重叠,甚至我都不知道从哪里开始。
也许您听说过类似的问题以及可能的解决方案?还是执行类似操作的Node.Js模块?
如果数组的顺序正确,则可以检查一个值和先前的值,确定最大增量并计算中间的时间。
let array = [21, 23, 25, 59, 10],
result = array
.reduce((r, value, i, { length, [(i + length - 1) % length]: prev }) => {
var delta = (value + 60 - prev) % 60;
if (!r || delta > r.delta) return { delta, value: (prev + delta / 2) % 60 };
return r;
}, undefined)
.value;
console.log(result);