В этой статье в основном изучается содержание, связанное с самой большой подводной лодкой в массивах программирования Java, как подробно описано ниже.
Встреча с хорошим человеком может изменить вашу жизнь; Встреча с хорошей книгой, не так ли?
Недавно у меня было много понимания, когда я читал « Оптимальные решения г -на Зуо Ченгёна для вопросов алгоритма и структуры данных руководства по интервью с кодом программиста » . Рекомендуется, чтобы блоггеры, у которых есть хобби в этой области, также пошли и смотрели.
Алгоритм самой большой матрицы массива на основе стека, объясненного в книге, очень классический, но блоггер обладает ограниченными способностями и не смог полностью понять суть алгоритма. Однако, основываясь на этой идее, блоггер разработал простой алгоритм для решения этой проблемы, который суммируется следующим образом.
Основная идея
Давайте сначала посмотрим на картинку, и мы можем грубо понять это.
Как показано на рисунке, каждый раунд является операцией, и наше ядро является внутренней операцией для каждого раунда.
Рассчитайте максимальную длину каждого слоя непрерывно и непрерывно
Другими словами, мы являемся наиболее важным массивом для расчета внизу до верхних раундов, а затем мы можем рассчитать область непрерывной максимальной подгруппы, которая может быть получена в этом раунде для каждого раунда. Затем вам нужно только сравнить самые большие данные для каждого раунда и вернуться, чтобы найти область самой большой непрерывной подводства массива.
Код
Хорошо, с изложенными вышеупомянутыми идеями, мы можем начать писать код. (Хотя я не думаю, что сказал это очень ясно, пожалуйста, прости меня).
Пакет stack_and_queue;/*** @author guo pu <br>* Рассчитайте область самой большой непрерывной области прямоугольника на основе массива*/public class maxrectangle {public static void main (string [] args) {integer [] arr = {2, 1, 3, 7, 6, 4}; integer maxrectgle = = 3, 5, 7, 6, 4}; maxrectangleea (arr); system.out.println («Область самой большой непрерывной прямоугольной области в массиве:" + maxrectangle);}/*** @param arr* @return максимальная область непрерывной прямоугольной области в массиве*/private integer maxRectangearea (integer [] arr) {int] [] inte [int] arse [] array = in vest vest in vest vest vest in vestege integere. Рассчитайте массив, пройдя непрерывную длину снизу до вверх для (int i = 1; i <= arr.length; i ++) {// Временное значение накопленной непрерывной длины в текущем раунде реализовано int temple = 0; // Записать максимальную непрерывную длину на высоту Потеря предыдущей части данных для (int j = 1; j <= arr.length; j ++) {if (arr [j - 1]> = i) {templen += 1; templen_max = templen;} else {templen = 0;}} result [i - 1] = i * templen_max;// system.out. Непрерывная длина слоя: "+templen_max);} // Найти число с наибольшим численным значением в массиве наборов результатов, то есть площадь самого большого прямоугольного домена в области непрерывности, найденной int maxarea = 0; for (int i = 0; i <result.length; i ++) {maxarea = maxarea> result? Результат [i];} // возвращать область максимального непрерывного прямоугольного поля, полученного путем возврата Maxarea;}}Комментарии в коде также являются относительно всеобъемлющими, поэтому я не буду вдаваться в подробности.
тест
Ниже приведено испытание массива. Во -первых, давайте проверим его с массивом, показанным на картинке в начале этой статьи.
Integer [] arr = {2,1,3,5,7,6,4} ・・・・Площадь самой большой непрерывной прямоугольной области в массиве: 16
Затем мы изменяем значения элементов в массиве для дальнейшего теста, чтобы увидеть, являются ли результаты правильными.
Integer [] arr = {2,1,3,1,7,6,4} ・・・・Площадь самой большой непрерывной прямоугольной области в массиве: 12
После того, как сам блоггер проверил это, алгоритм работает нормально. :)
Часть оптимизации
Говоря о части оптимизации, первое, что мы видим, это найти максимальное значение в массиве набора результатов на последнем шаге.
Действительно, мы можем на самом деле применить еще одну переменную, чтобы записать площадь самой большой подводной лодки раунда. Тем не менее, эта оптимизация не играет большой роли, и нет значительного улучшения в сложности времени.
Еще один момент, я думаю, что лучшая точка входа состоит в том, чтобы добавить суждение при выполнении расчетов для каждого раунда, чтобы решить, стоит ли циклироваться вниз до текущего раунда. Если элементы в массиве сильно колеблются, уровень оптимизации по -прежнему очень хорош.
Суммировать
Этот небольшой алгоритм более изысканный, и единственное, что более испорчено, - это то, что временная сложность немного более интенсивной. Если читатели ищут алгоритм с относительно низкой временной сложностью, пожалуйста, возьмите объезд.
Это довольно хорошо, если вы просто хотите найти результат. По крайней мере, это гораздо более эффективно, чем насильственный метод вычисления.
Выше приведено все содержимое этой статьи о простом решении максимальной подгруппы в массивах программирования Java. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!