剑指 Offer II 035. 最小时间差

103 阅读1分钟

剑指 Offer II 035. 最小时间差

image.png

  • 如图ASCII码表,可以利用它排序,两个数字字符串作差也可以利用它
  • 需要注意的是res = Math.min(res, p1 + 1440 - p2);,最优值,然后对首位值做个比较
var findMinDifference = function (time) {
  time.sort();
  var res = Number.MAX_VALUE;
  var p1 = getMinutes(time[0]);
  var p2 = p1;
  for (var i = 1; i < time.length; ++i) {
    var minutes = getMinutes(time[i]);
    res = Math.min(res, minutes - p2); // 相邻时间的时间差
    p2 = minutes;
  }
  res = Math.min(res, p1 + 1440 - p2); // 首尾时间的时间差
  return res;
};

var getMinutes = (arr) => {
  return (
    ((arr[0].charCodeAt() - "0".charCodeAt()) * 10 +
      (arr[1].charCodeAt() - "0".charCodeAt())) *
      60 +
    (arr[3].charCodeAt() - "0".charCodeAt()) * 10 +
    (arr[4].charCodeAt() - "0".charCodeAt())
  );
};