javascript - 使用数组字符串寻找性能可行性

标签 javascript arrays algorithm

这是要求的详细信息:

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/

相关文章:

javascript - 对 boolean 函数数组运行reduce。它总是返回 true,并且如果返回 false,则无法找到一种方法来突破 reduce 方法

javascript - 将数据放入对象中

algorithm - 与 x=(b/N)*(-floor(N/2) :floor(N/2)) in MATLAB 相同的 Excel 公式

java - 快速SVD算法

JavaScript 对应于 JQuery 的 .on(多个鼠标事件)

图像上的 Javascript 悬停问题

arrays - 使用数字作为默认索引

Javascript DomParser 忽略/抑制解析错误

javascript - 如何通过在 JavaScript 项目中移动文件来重构并自动更新引用?

javascript - 在大量数字中搜索第一个重复元素