Максимальное число из массива, равное произведению двух других чисел в этом массиве

#java #arrays

#java #массивы

Вопрос:

Недавно я прошел тест на размещение в Linkedin, в котором возник вопрос, в котором вывод для 4 тестовых примеров был неправильным для меня. Я не мог понять, в чем была моя ошибка, потому что входы / выходы были скрыты.

В любом случае, здесь был вопрос:

Найдите максимальный элемент из массива, где произведение любых других двух элементов будет равно этому числу, и верните это число .Если нет, такой элемент есть, тогда верните -1.

Вот мое решение:

 static int maxElement(int[] arr) {
  Arrays.sort(arr);
  int max = arr[arr.length-1];
  int result = 0;
  for (int i = 0; i < arr.length - 1; i  ) {
    for (int j = i   1; j < arr.length; j  ) {
      result = arr[i] * arr[j];
      if (result == max) {
        return max;
      }
    }
  }
  return -1;
}
  

Комментарии:

1. Каковы были тестовые примеры и как (с каким сообщением) они потерпели неудачу?

2. Ваш код может возвращать либо -1, либо максимальное значение массива (если это число является произведением двух других элементов). Что делать, если один из других элементов должен быть результатом операции?

Ответ №1:

Я думаю, вам нужно найти возможное максимальное число в массиве и произведение двух элементов в массиве.
Если я предполагаю это, ваш код завершается ошибкой для этого тестового примера: int[] arr = {2,4,5,3,7,6}; , где ответ должен быть 6 Проверьте это ниже кода, он будет работать для приведенного выше тестового примера.
Просто добавьте еще одно обратное for loop , чтобы проверить возможное значение и произведение.

 static int maxElement(int[] arr) {
        Arrays.sort(arr);
        for (int k = arr.length-1; k >= 0; k--) {
            int max = arr[k];
            int result = 0;
            for (int i = 0; i < arr.length - 1; i  ) {
                for (int j = i   1; j < arr.length; j  ) {
                    result = arr[i] * arr[j];
                    if (result == max) {
                        return max;
                    }
                }
            }   
        }
        return -1;
    }
  

Комментарии:

1. Я должен был рассмотреть этот сценарий (возможное максимальное число). Я продолжал пытаться исправить проблему, взяв максимальное число из массива. Теперь я не могу проверить этот код, потому что я отправил тест. Но ваше решение кажется мне правильным.

2. Да, такие вопросы, как правило, сбивают вас с толку. Поэтому нужно прочитать вопрос дважды или трижды, чтобы он был идеальным. Счастливого кодирования!

Ответ №2:

     List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < a.length; i  ) {
        list.add(a[i]);
    }
    int maxSum = 0;
    for (int i = 0; i < a.length; i  ) {
        for (int j = i   1; j < a.length; j  ) {
            if ((a[i] * a[j]) > maxSum) {
                if(list.contains(a[i] * a[j]))
                maxSum = a[i] * a[j];
            }
        }
    }

    if (maxSum != 0)
        return maxSum;
    return -1;