Solutions 1 through 3 probably have the same time complexity: O(n). The last one is an attempt at binary search which requires the array to be sorted, but the array you mentioned specifically is not sorted (due to the 48). That would have O(log(N)) complexity if the input were already sorted.

In terms of readability, solution 1 is the most readable and probably makes the function completely unnecessary since you could just as easily call the includes method directly (and is probably just as readable in the calling code if not more readable). Solution 3 is the next best followed by solution 2 and finally solution 4. Of course, it is a bit unfair to compare solution 4 to the others since it is actually trying to implement a searching algorithm whereas the others are just linear searches.

I should probably also mention that the binary search algorithm is broken since you should be modifying the rightIndex (not the leftIndex) when the target is less than the one at middleIndex. See this helpful visualization of the binary search algorithm.

I also think it was meant to return true rather than middleIndex since the alternative returns false.