Решение # 1
Поскольку исходный вопрос требует только упрощенного решения (а не более быстрого), вот однострочное решение:
public boolean contains(int[] array, int key) {
return Arrays.toString(array).matches(".*[\\[ ]" + key + "[\\],].*");
}
Объяснение: В документации Javadoc Arrays.toString()
указано, что результат заключен в квадратные скобки, а соседние элементы разделены символами «,» (запятая, за которой следует пробел). Так что мы можем на это рассчитывать. Сначала мы конвертируем array
в строку, а затем проверяем, key
содержится ли в этой строке. Конечно, мы не можем принимать «субчисла» (например, «1234» содержит «23»), поэтому мы должны искать шаблоны, в которых перед key
символом стоит открывающая скобка или пробел, а за ним следует закрывающая скобка или запятая.
Примечание . Используемый шаблон регулярного выражения также правильно обрабатывает отрицательные числа (строковое представление которых начинается со знака минус).
Решение # 2
Это решение уже опубликовано, но содержит ошибки, поэтому я публикую правильное решение:
public boolean contains(int[] array, int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
Также у этого решения есть побочный эффект: оно изменяет array
(сортирует).