首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在数组中找出两次之间的最短差

在数组中找出两次之间的最短差
EN

Stack Overflow用户
提问于 2022-08-02 03:56:21
回答 1查看 178关注 0票数 -1

我有以下strArr数组

“下午1:10”、“凌晨4:40”、“下午5:00”

现在,我试图找到最短的时间差之间的分钟以上的时间列表。

在上面的数组中,它应该会给我230号。

所有的时间都是12小时的。(HH:上午/下午)

代码语言:javascript
代码运行次数:0
运行
复制
function TimeDifference(strArr) { 

  // code goes here  
  return strArr; 

}
   
// keep this function call here 
console.log(TimeDifference(readline()));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-04 09:52:09

因为您需要以分钟为单位的结果,所以首先我会将所有的值转换为分钟:

代码语言:javascript
代码运行次数:0
运行
复制
strArr.map((time) => /(\d{1,2}):(\d{1,2})(am|pm)/.exec(time).slice(1))
  .map(([hour, min, midday]) =>
    (Number(hour) + (midday === `pm` ? 12 : 0)) * 60 + Number(min))

然后,我把它从最小到最大排序,这样我们就可以比较n(i)和n(i + 1):

代码语言:javascript
代码运行次数:0
运行
复制
.sort((a, b) => (a > b ? 1 : a < b ? -1 : 0))

在我们在几分钟内整理好时间后,我们需要找出不同之处。这是一个有趣的部分,因为我们还需要考虑整个24小时的时间差异,例如11:59pm - 0:01am应该返回2分钟。如果我们现在进行n(i + 1) - n(i)的简单减法,在这种情况下我们会得到一个错误的结果。这是我的解决方案(尽管我认为还有更好的):

代码语言:javascript
代码运行次数:0
运行
复制
const WHOLEDAY = 60 * 24;

const findDifference = (a, b) => {
  let diff = 0;
  while (a != b) {
    a = (a + 1) % WHOLEDAY;
    diff += 1;
  }
  return diff;
};

strArr.map((v, i, arr) => findDifference(v, arr[(i + 1) % arr.length]));

为了避免丢失最近的时间和最早的时间(第二天)之间的差异,我们需要比较最后一个值和第一个值。

然后我们要做的就是把它缩小到最小的差别:

代码语言:javascript
代码运行次数:0
运行
复制
strArr.reduce((a, b) => (a < b ? a : b));

这就是你要的。不过,当输入错误时,我并不关心这些情况。

代码语言:javascript
代码运行次数:0
运行
复制
const arr1 = ["1:10pm", "4:40am", "5:00pm"];
const arr2 = ["11:50pm", "0:30am"];
const arr3 = ["4:23am", "4:25am", "4:26am", "4:28am"];
const arr4 = ["0:00am"];

const WHOLEDAY = 60 * 24;

const findDifference = (a, b) => {
  let diff = 0;
  while (a != b) {
    a = (a + 1) % WHOLEDAY;
    diff += 1;
  }
  return diff;
};

const timeDifference = (strArr) =>
  strArr
    .map((time) => /(\d{1,2}):(\d{1,2})(am|pm)/.exec(time).slice(1))
    .map(([hour, min, midday]) =>
      (Number(hour) + (midday === `pm` ? 12 : 0)) * 60 + Number(min))
    .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
    .map((v, i, arr) => findDifference(v, arr[(i + 1) % arr.length]))
    .reduce((a, b) => (a < b ? a : b));

console.log(timeDifference(arr1)); // 230
console.log(timeDifference(arr2)); // 40
console.log(timeDifference(arr3)); // 1
console.log(timeDifference(arr4)); // 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73201816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档