这是要求的详细信息:
time = ["09-13", "12-14"]
getResult(time) = false
第一场演出从上午 9 点到下午 1 点。第二场从中午 12 点开始。因此,您将无法完整地看到每场演出。
time = ["07-09", "10-12", "15-19"]
getResult(time) = true
但我无法得到结果。我正在寻找挑战来完成它。有人帮帮我吗?
这是我的尝试:
const getResult = (time) => {
const nums = [];
let pre = 0;
time.map((item,index) => {
item.split('-').map((v,i) => {
nums.push(+v);//converting as number
});
});
const result = nums.map((v,i) => {
if(!i) return;
console.log(v-pre)//but logically this is not works
pre = v;
})
}
//time = ["09-13", "12-14"]; //false
time = ["07-09", "10-12", "15-19"] //true
getResult(time); //should be false
提前致谢。
最佳答案
一旦我们在它们的 -
上拆分值,您的格式就已经可用于直接 >=
比较。所以我们可以简单地对值进行排序,然后检查在第一个之后的每种情况下,开始部分(-
之前)至少与结束部分( 之后)一样大-
) 的前一个值。它可能看起来像这样:
const feasible = (times) => [... times]
.sort ()
.every ((t, i, a) => i == 0 || t .split ('-') [0] >= a [i - 1] .split ('-') [1])
console .log (feasible (["09-13", "12-14"]))
console .log (feasible (["07-09", "10-12", "15-19"]))
我们使用 i == 0 ||
来简单地避免测试第一个排序值。
这涉及将每个值拆分两次(好吧,除了第一个。)如果这种低效率困扰您,我们可以通过拆分它们并保存结果来解决它(使用更多内存;总是需要权衡!):
const feasible = (times) => [... times]
.sort ()
.map (s => s .split ('-'))
.every ((t, i, a) => i == 0 || t [0] >= a [i - 1] [1])
关于javascript - 使用数组字符串寻找性能可行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72224876/