Найти максимальное произведение элемента каждый из трех массивов - PullRequest
1 голос
/ 10 июня 2019

Учитывая 3 массива переменной длины, имеющих целые числа (положительные и отрицательные), найти максимальное произведение, которое можно сформировать путем умножения элемента, взятого из каждого массива.

Например.

A = [ 10, -10,15,-12];
B = [10, -12,13,-12];
C = [-11, -10, 9,-12];

Для вышеуказанных массивов: Максимальное произведение = 2160 с использованием 15, -12, -12.

Я пытался реализовать его, используя метод грубой силы O (N ^ 3), используя три вложенных цикла for , но я ищу более оптимизированный подход .

int[] A = new int[]{10,-10,15,-12};
int[] B = new int[]{10,-12,13,-12};
int[] C = new int[]{-11,-10,9,-12};

int max = Integer.MIN_VALUE;

int pos[][]=new int[3][2];

for (int i=0; i < A.length ; i++ ){

    for (int j=0; j < B.length ; j++ ){

        for (int k=0; k < C.length ; k++ ){

            int prod = A[i] * B[j] * C[k];

            if( prod > max ){
                max = prod;
                pos[0][0]=i;
                pos[1][0]=j;
                pos[2][0]=k;
                pos[0][1]=A[i];
                pos[1][1]=B[j];
                pos[2][1]=C[k];
            }

        } 
    }   
}
System.out.println("Maximum product = "+max+" using "+pos[0][1]+", "+pos[1][1]+", "+pos[2][1]+".");

Мои мысли пока:

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

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

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Это очень похоже на Как получить K наименьших продуктов из пар из двух отсортированных массивов? , за исключением того, что здесь у нас есть три списка и мы заинтересованы в максимальном продукте.

  1. Найти минимальное и максимальное значения каждого списка: мин А , макс А , мин Б , макс Б , мин. C и макс. C .

  2. Максимальный продукт составляет максимум:

    мин A * min B * min C

    min A * min B * max C

    мин A * макс B * мин C

    мин A * max B * max C

    max A * min B * min C

    max A * min B * max C

    max A * max B * min C

    max A * max B * max C

1 голос
/ 10 июня 2019

Один из вариантов - отсортировать все три массива, каждый из которых стоит O (nlogn) (это не вложенность), а затем поместить наиболее положительные и отрицательные элементы из каждого из отсортированных массивов в другой массив, который вы также сортируете дляО (время).

В этот момент вы можете просто проверить в массиве из 6 элементов, чтобы увидеть, больше ли произведение трех наиболее положительных элементов, чем произведение наиболее положительного элемента и двух наиболее отрицательных элементов, и вернуть этот результат.

0 голосов
/ 10 июня 2019

Существует четыре способа получения максимального продукта:

  1. взять максимум из каждого из трех массивов
  2. взять максимум из первого массива и минимум из второго и третьего массивов
  3. взять максимум из второго массива и минимум из первого и третьего массивов
  4. взять максимум из третьего массива и минимум из первого и второго массивов

Вы можете найти минимальный и максимальный элементы путем сортировки или просто путем последовательного сканирования массивов.

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