Я недавно сталкивался с этим алгоритмическим c вопросом в интервью. Вопрос звучит примерно так:
Первоначально задан прямоугольник (начиная с начала координат (0,0) и заканчивая (n, m)). Тогда есть q запросов, таких как x = r или y = c, которые в основном делят начальные прямоугольники на меньшие прямоугольники. После каждого запроса мы должны возвращать самый большой размер прямоугольника, который в настоящее время существует.
См. Диаграмму:
Итак, здесь мы изначально получили прямоугольник от (0,0) до (6,6) [квадрат на самом деле !!]. Теперь после 1-го запроса (показано пунктирной линией выше) x = 2, самый большой размер прямоугольника равен 24. После второго запроса y = 1, самый большой размер прямоугольника равен 20. И это так и продолжается.
Мой подход к решению этой проблемы:
При каждом запросе найдите:
The largest interval on the x axis (maxX) [keep storing all the x = r values in a list]
The largest interval on y axis (maxY) [keep storing all the y = c values in another list]
На каждый запрос ваш ответ будет (maxX * maxY)
Для поиска 1 и 2 у меня будет перебирать весь список, что не очень эффективно.
Итак, у меня есть 2 вопроса:
Правильно ли мое решение? Если нет, то каков правильный подход к проблеме. Если да, как я могу оптимизировать свое решение?