Почему мое решение возвращает правильный результат в консоли и неправильный в Leetcode? Задача 937. Изменение порядка данных в файлах журналов - PullRequest
2 голосов
/ 17 января 2020

Задача https://leetcode.com/problems/reorder-data-in-log-files/ Одно из моих решений прошло все тесты leetcode, а другое падает с ошибкой:

Принято решение:

var reorderLogFiles = (logs)=> {
    let head = []
    let tail = []
    logs.forEach((val, i) => {
    if (!isNaN(val.split(" ")[1])) tail.push(val)
    else head.push(val)
  })
  return head.sort((a, b) => {
    let aStr = a.replace(/\w* /, ''), bStr = b.replace(/\w* /, '')
    return aStr !== bStr ? aStr.localeCompare(bStr) : a.split(" ")[0].localeCompare(b.split(" ")[0])
  }).concat(tail)
}

Недопустимое решение:

var reorderLogFiles = (logs) => {
  return logs.sort((a, b)=>{
    let isDigit1 = !isNaN(a.split(" ")[1]), isDigit2 = !isNaN(b.split(" ")[1])
    if (!isDigit1 && !isDigit2) {
      let aStr = a.replace(/\w* /, ''), bStr = b.replace(/\w* /, '')
      return aStr !== bStr ? aStr.localeCompare(bStr) : a.split(" ")[0].localeCompare(b.split(" ")[0])
    }
    return isDigit1 ? (isDigit2 ? 0 : 1) : -1;
  })
}

контрольный пример

["6p tzwmh ige mc", "ns 566543603829", "ubd cujg j d yf", "ha6 1 938 376 5", "3yx 97 666 56 5", "d 84 34353 2249", "0 tllgmf qp znc", "s 1088746413789", "ys0 splqqxoflgx", "uhb rfrwt qzx r", "u lrvmdt ykmox", "ah4 4209164350", "rap 7729 8 125", "4 nivgc qo z i", "apx 814023338 8"]

Мой вывод в консоли для обоих решений (аналогично ожидаемому ):

["ubd cujg j d yf", "u lrvmdt ykmox", "4 nivgc qo z i", "uhb rfrwt qzx r", "ys0 splqqxoflgx", "0 tllgmf qp znc", "6p tzwmh ige mc", "ns 566543603829", "ha6 1 938 376 5", "3yx 97 666 56 5", "d 84 34353 2249", "s 1088746413789", "ah4 4209164350", "rap 7729 8 125", "apx 814023338 8"]

вывод leetcode для второго решения с этим тестовым примером:

["ubd cujg j d yf","u lrvmdt ykmox","4 nivgc qo z i","uhb rfrwt qzx r","ys0 splqqxoflgx","0 tllgmf qp znc","6p tzwmh ige mc","ns 566543603829","ha6 1 938 376 5","3yx 97 666 56 5","d 84 34353 2249","ah4 4209164350","rap 7729 8 125","apx 814023338 8","s 1088746413789"]

Вот скрипта: https://jsfiddle.net/tomatetz/shj5kn39/9/ Почему вывод jsfiddle и вывод leetcode одна и та же функция отличается?

1 Ответ

0 голосов
/ 17 января 2020

Вы поставили "s 1088746413789" перед "apx 814023338 8", и они перевернули его.

Проблема говорит: Буквенные журналы упорядочены лексикографически, игнорируя идентификатор, с идентификатором, используемым в случае связей. Это оба письма. Вы ставите их лексикографически по символам, они делали лексикографически по номерам.

То есть, ваш заказ, потому что "1088746413789" лексикографически перед "814023338". Их порядок объясняется тем, что 814023338 - до 1088746413789.

Я думаю, что вопрос был сформулирован неясно и должен быть указан как ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...