假设我有一个数字数组(表示cron作业应该运行的分钟数(:
let arr = ['21', '23', '25', '59', '10']
我想在这个数组arr
中插入一个新的数字,但我想确保它离这个谱中已经存在的任何两个数字最远。
直觉上,我可以说它应该在44左右,但我如何将其编程为算法?
我知道这个问题有点笼统,但它对自动调度cronjobs非常有用,这样它们就不会重叠,我甚至不知道从哪里开始。
也许你听说过类似的问题和可能的解决方案?或节点。Js模块做类似的事情?
如果数组的值是有序的,您可以检查一个值和前一个值,pic最大的delta,并计算在中间的时间。
let array = [35, 23, 25, 59, 10];
array.sort((a, b) => a - b); // sorts numbers in ascending order
let 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);
console.log(parseInt(result)); // in case if used for cron