List<int> przeszukiwanie

0

Witam,

Mam kolekcje: List<int> i chce stworzyć metodę która przyjmuje int-a i jeżeli dany int nie znajduje się w koleckji to zwraca najbliższy mu element, tzn. lista składa się z następujących elementów: 3, 5, 8, 9, 12 jako paramenr przekazuje np 6 i teraz skoro liczba 6 nie znajduje się w kolekcji a jej najbliższa liczba to 5 to chce ją zwrócić - jakieś pomysły jak to zaimplementować?

0

Przeszukaj cała listę posiadając dwie zmienne powiedzmy int diffrence, int currentNumber. Przy każdej iteracji sprawdzaj czy Math.Abs((szukanaLiczba - lista[index])) < diffrence , jeśli tak to ustaw diffrence na Math.Abs( szukanaLiczba - lista[index] ) , a currentNumber na lista[index]. Przerwij jak diffrence równy zeru i zwróc currentNumber. Jak lista jest już posortowana to można się pobawić w podobny sposób z przeszukiwaniem binarnym.

1

Z internetu*

public int closest(int of, List<Integer> in) {
    int min = Integer.MAX_VALUE;
    int closest = of;

    for (int v : in) {
        final int diff = Math.abs(v - of);

        if (diff < min) {
            min = diff;
            closest = v;
        }
    }

    return closest;
}
0

Wszytko pięknie, ale autor nie napisał co chce zwrócić gdy są dwie różne liczby najbliższe. Przybliżenie z dołu, z góry, pierwsze znalezione, ostatnie znalezione,...

0

Gdy są dwie różne liczby najbliższe to nie ma znaczenia która zwróce - sorry że nie dopisałem tego wcześniej.

Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1