Rozwiązanie nr 1
Ponieważ pierwotne pytanie dotyczy tylko uproszczonego rozwiązania (a nie szybszego), oto rozwiązanie jednowierszowe:
public boolean contains(int[] array, int key) {
return Arrays.toString(array).matches(".*[\\[ ]" + key + "[\\],].*");
}
Objaśnienie: Javadoc Arrays.toString()
stanów wynik jest ujęty w nawiasy kwadratowe, a sąsiednie elementy są oddzielone znakami „,” (przecinek, po którym następuje spacja). Więc możemy na to liczyć. Najpierw konwertujemy array
na ciąg, a następnie sprawdzamy, czy key
jest w nim zawarty. Oczywiście nie możemy zaakceptować „numerów podrzędnych” (np. „1234” zawiera „23”), więc musimy szukać wzorców, w których key
poprzedzony jest nawiasem otwierającym lub spacją, po którym następuje nawias zamykający lub przecinek.
Uwaga: użyty wzorzec wyrażenia regularnego również poprawnie obsługuje liczby ujemne (których reprezentacja w postaci łańcucha zaczyna się od znaku minus).
Rozwiązanie nr 2
To rozwiązanie jest już opublikowane, ale zawiera błędy, więc zamieszczam poprawne rozwiązanie:
public boolean contains(int[] array, int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
Również to rozwiązanie ma efekt uboczny: modyfikuje array
(sortuje).