Образец < /p>
const roomsByFloor = {
"5": [
{ "floor": 5, "room": 2, "type": "A" },
{ "floor": 5, "room": 3, "type": "A" },
{ "floor": 5, "room": 4, "type": "A" },
{ "floor": 5, "room": 5, "type": "B" },
{ "floor": 5, "room": 6, "type": "B" },
{ "floor": 5, "room": 43, "type": "B" },
{ "floor": 5, "room": 57, "type": "B" },
{ "floor": 5, "room": 58, "type": "A" },
{ "floor": 5, "room": 70, "type": "C" },
{ "floor": 5, "room": 72, "type": "C" }
]
};
< /code>
dise
console.log(getNearestRooms("2A,2B,2C")); // the expect answer is 4 43 57 58 70 72< /code>
это означает выбрать 2 комнаты из категории A, 2 комнат из категории B и 2 комнат из категории c. < /p>
Ограничение: < /p>
[*] Выбранные комнаты должны быть ближе всего к комнатам из разных категорий < /li>
< /ol>
Пример, 2a может быть 2 3 4 58 Но кратчайшее расстояние до B и C составляет 4 и 58 < /li>
< /ul>
Количество выбранных комнат Необходимо соответствовать: Для тестирования можно добавить больше комнат. Запрос может быть отредактирован как «2a, 1b, 2c»
[*] Для ввода «2a, 2b», результат должен быть 3, 4, 5, 6
Для ввода "2b, 2c", результат должен быть 43, 57, 70, 72 < /code> < /li>
< /ol>
console.log(getNearestRooms("2A,2B,2C")); // Expected output: [4, 43, 57, 58, 70, 72]
console.log(getNearestRooms("2A,2B")); // Expected output: [3, 4, 5, 6]
console.log(getNearestRooms("2B,2C")); // Expected output: [43, 57, 70, 72]
console.log(getNearestRooms("1A,1B,1C")); // Expected output: [58, 57, 70]
console.log(getNearestRooms("3A,3B,3C")); // Expected output: [3, 4, 5, 6, 70, 72]
< /code>
Первоначально, я думал, что это можно решить с помощью техники скользящего окна, но это оказалось сложнее, чем ожидалось, и я не смог его решить. Какой другой метод может быть применен?const roomsByFloor = {
"5": [
{ "floor": 5, "room": 2, "type": "A" },
{ "floor": 5, "room": 3, "type": "A" },
{ "floor": 5, "room": 4, "type": "A" },
{ "floor": 5, "room": 5, "type": "B" },
{ "floor": 5, "room": 6, "type": "B" },
{ "floor": 5, "room": 43, "type": "B" },
{ "floor": 5, "room": 57, "type": "B" },
{ "floor": 5, "room": 58, "type": "A" },
{ "floor": 5, "room": 70, "type": "C" },
{ "floor": 5, "room": 72, "type": "C" }
]
};
function getNearestRooms(request) {
// Parse request: Extract number & type of each required room
let roomRequests = request.split(',').map(category => ({
count: parseInt(category.match(/\d+/)[0]), // "2A" → 2
type: category.match(/[a-zA-Z]+/)[0].toUpperCase() // "2A" → "A"
}));
let result = [];
for (let floor in roomsByFloor) {
let floorRooms = roomsByFloor[floor]; // Get all rooms on this floor
let counts = {}; // Frequency map for room types in the current window
let left = 0, right = 0;
let closestDistance = Infinity;
let floorResult = [];
// Expand the window with right pointer
while (right < floorRooms.length) {
let rightRoom = floorRooms[right];
counts[rightRoom.type] = (counts[rightRoom.type] || 0) + 1;
right++;
// Try to shrink the window while still satisfying conditions
while (roomRequests.every(req => counts[req.type] >= req.count)) {
let currentDistance = floorRooms[right - 1].room - floorRooms[left].room;
// Update the best result if this subset is smaller
if (currentDistance < closestDistance) {
closestDistance = currentDistance;
floorResult = floorRooms.slice(left, right).map(r => r.floor * 100 + r.room);
}
// Remove leftmost room from window and shift `left`
let leftRoom = floorRooms[left];
counts[leftRoom.type]--;
if (counts[leftRoom.type] === 0) delete counts[leftRoom.type];
left++;
}
}
if (floorResult.length) {
result = floorResult;
}
}
return result;
}
console.log(getNearestRooms("2A,2B,2C"));
Подробнее здесь: https://stackoverflow.com/questions/794 ... oom-number
Вопрос о реальной жизни, найдите ближайший номер комнаты ⇐ Javascript
Форум по Javascript
-
Anonymous
1740542943
Anonymous
Образец < /p>
const roomsByFloor = {
"5": [
{ "floor": 5, "room": 2, "type": "A" },
{ "floor": 5, "room": 3, "type": "A" },
{ "floor": 5, "room": 4, "type": "A" },
{ "floor": 5, "room": 5, "type": "B" },
{ "floor": 5, "room": 6, "type": "B" },
{ "floor": 5, "room": 43, "type": "B" },
{ "floor": 5, "room": 57, "type": "B" },
{ "floor": 5, "room": 58, "type": "A" },
{ "floor": 5, "room": 70, "type": "C" },
{ "floor": 5, "room": 72, "type": "C" }
]
};
< /code>
dise
console.log(getNearestRooms("2A,2B,2C")); // the expect answer is 4 43 57 58 70 72< /code>
это означает выбрать 2 комнаты из категории A, 2 комнат из категории B и 2 комнат из категории c. < /p>
Ограничение: < /p>
[*] Выбранные комнаты должны быть ближе всего к комнатам из разных категорий < /li>
< /ol>
Пример, 2a может быть 2 3 4 58 Но кратчайшее расстояние до B и C составляет 4 и 58 < /li>
< /ul>
Количество выбранных комнат Необходимо соответствовать: Для тестирования можно добавить больше комнат. Запрос может быть отредактирован как «2a, 1b, 2c»
[*] Для ввода «2a, 2b», результат должен быть 3, 4, 5, 6
Для ввода "2b, 2c", результат должен быть 43, 57, 70, 72 < /code> < /li>
< /ol>
console.log(getNearestRooms("2A,2B,2C")); // Expected output: [4, 43, 57, 58, 70, 72]
console.log(getNearestRooms("2A,2B")); // Expected output: [3, 4, 5, 6]
console.log(getNearestRooms("2B,2C")); // Expected output: [43, 57, 70, 72]
console.log(getNearestRooms("1A,1B,1C")); // Expected output: [58, 57, 70]
console.log(getNearestRooms("3A,3B,3C")); // Expected output: [3, 4, 5, 6, 70, 72]
< /code>
Первоначально, я думал, что это можно решить с помощью техники скользящего окна, но это оказалось сложнее, чем ожидалось, и я не смог его решить. Какой другой метод может быть применен?const roomsByFloor = {
"5": [
{ "floor": 5, "room": 2, "type": "A" },
{ "floor": 5, "room": 3, "type": "A" },
{ "floor": 5, "room": 4, "type": "A" },
{ "floor": 5, "room": 5, "type": "B" },
{ "floor": 5, "room": 6, "type": "B" },
{ "floor": 5, "room": 43, "type": "B" },
{ "floor": 5, "room": 57, "type": "B" },
{ "floor": 5, "room": 58, "type": "A" },
{ "floor": 5, "room": 70, "type": "C" },
{ "floor": 5, "room": 72, "type": "C" }
]
};
function getNearestRooms(request) {
// Parse request: Extract number & type of each required room
let roomRequests = request.split(',').map(category => ({
count: parseInt(category.match(/\d+/)[0]), // "2A" → 2
type: category.match(/[a-zA-Z]+/)[0].toUpperCase() // "2A" → "A"
}));
let result = [];
for (let floor in roomsByFloor) {
let floorRooms = roomsByFloor[floor]; // Get all rooms on this floor
let counts = {}; // Frequency map for room types in the current window
let left = 0, right = 0;
let closestDistance = Infinity;
let floorResult = [];
// Expand the window with right pointer
while (right < floorRooms.length) {
let rightRoom = floorRooms[right];
counts[rightRoom.type] = (counts[rightRoom.type] || 0) + 1;
right++;
// Try to shrink the window while still satisfying conditions
while (roomRequests.every(req => counts[req.type] >= req.count)) {
let currentDistance = floorRooms[right - 1].room - floorRooms[left].room;
// Update the best result if this subset is smaller
if (currentDistance < closestDistance) {
closestDistance = currentDistance;
floorResult = floorRooms.slice(left, right).map(r => r.floor * 100 + r.room);
}
// Remove leftmost room from window and shift `left`
let leftRoom = floorRooms[left];
counts[leftRoom.type]--;
if (counts[leftRoom.type] === 0) delete counts[leftRoom.type];
left++;
}
}
if (floorResult.length) {
result = floorResult;
}
}
return result;
}
console.log(getNearestRooms("2A,2B,2C"));
Подробнее здесь: [url]https://stackoverflow.com/questions/79468506/real-life-question-find-the-nearest-room-number[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия