#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;