Ну, вы никогда не определяли "i", но если ваш массив отсортирован, это будет работать для любого полностью упорядоченного типа, где есть только один правильный порядок сортировки для коллекции, а float такого типа.
Поплавки редко бывают в точности равны друг другу, особенно если они заранее прошли какие-либо реальные этапы расчета.Обычно лучше проверить, находятся ли числа с плавающей запятой в небольшом диапазоне друг от друга, чтобы обработать некоторые из неизбежных ошибок в вычислениях из-за округления.Если вы не выполняете вычислительные операции раньше времени и просто принимаете ввод, это должно сработать.
Вы знакомы с хеш-таблицами?Эта проблема может быть решена за O (n) раз.Вам не нужно сортировать массив, поэтому вы не тратите O (n lg n) времени на его сортировку.Для каждого элемента проверьте, находится ли он уже в хэш-таблице;верните его, если он есть, и вставьте его в хеш-таблицу, если это не так.Операции вставки и чтения - это O (1) (амортизируется и при условии хорошей хэш-функции) для хэш-таблицы, поэтому она должна соответствовать вашим потребностям.Хеш-таблица не может выполнить приблизительное совпадение, хотя хеш-таблицы полезны только для поиска точных значений, поскольку они не хранят данные в отсортированном порядке.
Полностью универсальная реализация Java, которая должна работать дляЛюбой тип, который определяет значимую хеш-функцию и значащее равенство (при условии, что эталонное поведение объекта по умолчанию неверно):
import java.util.HashSet;
class DuplicateValue{
public static <T> duplicateValue(T[] values){
HashSet<T> store = new HashSet<T>();
for(T item : values){
if(store.contains(item)){
return item;
}
store.add(item);
}
return null; //no duplicate found
}
}
Это работает буквально для любого типа данных, поскольку Java предоставляет встроенные функции HashCode и Equals.Тем не менее, если вы используете пользовательский тип данных, обязательно переопределите .hashCode и .equals, чтобы получить значимые результаты.float не является объектом, но он может быть автоматически помещен в Float, который является