Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Comparator;
- import java.util.function.Predicate;
- /**
- * Created by ZeRoGerc on 24.02.15.
- */
- public class BinarySearchSpan {
- // P: ( let (predicate(-1) == false && predicate(numbers.length) == true) ) &&
- // (if i < j predicate.test(numbers[i]) <= predicate.test(numbers[j]))
- public static int iterativeBinarySearch(int[] numbers, Predicate<Integer> predicate) {
- int l = -1, r = numbers.length;
- // I: predicate(l) == false && predicate(r) == true
- while (r - l > 1) {
- int mid = l + (r - l) / 2;
- if (predicate.test(numbers[mid])) {
- r = mid;
- } else {
- l = mid;
- }
- }
- return r;
- }
- // S: return : (predicate(ret) == true && predicate(ret - 1) == false)
- public static void main(String[] args) {
- int[] numbers = new int[args.length - 1];
- for (int i = 1; i < args.length; i++) {
- numbers[i - 1] = Integer.parseInt(args[i]);
- }
- int x = Integer.parseInt(args[0]);
- int l = iterativeBinarySearch(numbers, e -> e <= x);
- int r = iterativeBinarySearch(numbers, e -> e < x);
- System.out.println(l + " " + (r - l));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement