Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.25 KB | None | 0 0
  1. import java.util.Comparator;
  2. import java.util.function.Predicate;
  3.  
  4. /**
  5.  * Created by ZeRoGerc on 24.02.15.
  6.  */
  7. public class BinarySearchSpan {
  8.  
  9.     // P: ( let (predicate(-1) == false && predicate(numbers.length) == true) ) &&
  10.     // (if i < j predicate.test(numbers[i]) <= predicate.test(numbers[j]))
  11.     public static int iterativeBinarySearch(int[] numbers, Predicate<Integer> predicate) {
  12.         int l = -1, r = numbers.length;
  13.  
  14.         // I: predicate(l) == false && predicate(r) == true
  15.         while (r - l > 1) {
  16.             int mid = l + (r - l) / 2;
  17.  
  18.             if (predicate.test(numbers[mid])) {
  19.                 r = mid;
  20.             } else {
  21.                 l = mid;
  22.             }
  23.         }
  24.  
  25.         return r;
  26.     }
  27.     // S: return : (predicate(ret) == true && predicate(ret - 1) == false)
  28.  
  29.     public static void main(String[] args) {
  30.         int[] numbers = new int[args.length - 1];
  31.  
  32.         for (int i = 1; i < args.length; i++) {
  33.             numbers[i - 1] = Integer.parseInt(args[i]);
  34.         }
  35.  
  36.         int x = Integer.parseInt(args[0]);
  37.  
  38.         int l = iterativeBinarySearch(numbers, e -> e <= x);
  39.         int r = iterativeBinarySearch(numbers, e -> e < x);
  40.  
  41.         System.out.println(l + " " + (r - l));
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement