Сложность: medium
Учитывая массив arr из 4 цифр, найдите самое позднее 24-часовое время, которое можно составить, используя каждую цифру ровно один раз. 24-часовое время имеет формат "ЧЧ:ММ", где ЧЧ - от 00 до 23, а ММ - от 00 до 59. Самое раннее 24-часовое время - 00:00, а самое позднее - 23:59. Верните самое позднее 24-часовое время в формате "HH:MM". Если не удается определить действительное время, возвращается пустая строка.
Пример:
Input: arr = [1,2,3,4]
Output: "23:41"
👨💻 Алгоритм:
1⃣Перебрать все возможные перестановки массива arr.
2⃣Проверить каждую перестановку, можно ли из нее составить допустимое 24-часовое время.
Найти самое позднее допустимое время среди всех перестановок.
3⃣Алгоритм
Перебрать все возможные перестановки массива arr.
Проверить каждую перестановку, можно ли из нее составить допустимое 24-часовое время.
Найти самое позднее допустимое время среди всех перестановок.
Вернуть найденное время в формате "HH
". Если допустимое время не найдено, вернуть пустую строку.
😎 Решение:
var largestTimeFromDigits = function(arr) {
let maxTime = -1;
const permute = (arr, start = 0) => {
if (start === arr.length) {
const hours = arr[0] * 10 + arr[1];
const minutes = arr[2] * 10 + arr[3];
if (hours < 24 && minutes < 60) {
maxTime = Math.max(maxTime, hours * 60 + minutes);
}
return;
}
for (let i = start; i < arr.length; i++) {
[arr[start], arr[i]] = [arr[i], arr[start]];
permute(arr, start + 1);
[arr[start], arr[i]] = [arr[i], arr[start]];
}
};
permute(arr);
if (maxTime === -1) {
return "";
}
const hours = Math.floor(maxTime / 60);
const minutes = maxTime % 60;
return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
};edium
Задача: 954. Array of Doubled Pairs
Если задан целочисленный массив четной длины arr, верните true, если можно переупорядочить arr так, чтобы arr[2 * i + 1] = 2 * arr[2 * i] для каждого 0 <= i < len(arr) / 2, или false в противном случае.
Пример:
Input: arr = [3,1,3,6]
Output: false
👨💻 Алгоритм:
1⃣Подсчитать частоту каждого элемента в массиве.
Отсортировать массив по абсолютным значениям элементов.
2⃣Для каждого элемента в отсортированном массиве:
Проверить, можно ли сопоставить его с элементом, равным его удвоенному значению.
Уменьшить счетчик обоих элементов в словаре частот.
3⃣Если для каждого элемента можно найти пару, вернуть true, иначе вернуть false.
😎 Решение:
var canReorderDoubled = function(arr) {
let count = new Map();
for (let num of arr) {
count.set(num, (count.get(num) || 0) + 1);
}
arr.sort((a, b) => Math.abs(a) - Math.abs(b));
for (let num of arr) {
if (count.get(num) === 0) continue;
if (count.get(num * 2) === 0) return false;
count.set(num, count.get(num) - 1);
count.set(num * 2, count.get(num * 2) - 1);
}
return true;
};Ставь 👍 и забирай 📚 Базу знаний