public class Main {
public static int upperBound(int[] arr, int target) {
int left = 0;
int right = arr.length;
while (left < right) {
int mid = left + (right - left) / 2;
if (arr[mid] <= target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
public static void main
(String[] args
) { int[] arr = {1, 3, 5, 6 , 6, 7, 7, 9};
int target = 6;
int upperBoundIndex = upperBound(arr, target);
if (upperBoundIndex < arr.length) {
System.
out.
println("Upper bound of " + target
+ " is at index " + upperBoundIndex
); } else {
System.
out.
println("Upper bound of " + target
+ " is not found in the array. n = " + arr.
length); }
}
}
cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyBpbnQgdXBwZXJCb3VuZChpbnRbXSBhcnIsIGludCB0YXJnZXQpIHsKICAgICAgICBpbnQgbGVmdCA9IDA7CiAgICAgICAgaW50IHJpZ2h0ID0gYXJyLmxlbmd0aDsKCiAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewogICAgICAgICAgICBpbnQgbWlkID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKCiAgICAgICAgICAgIGlmIChhcnJbbWlkXSA8PSB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBsZWZ0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnRbXSBhcnIgPSB7MSwgMywgNSwgNiAsIDYsIDcsIDcsIDl9OwogICAgICAgIGludCB0YXJnZXQgPSA2OwogICAgICAgIGludCB1cHBlckJvdW5kSW5kZXggPSB1cHBlckJvdW5kKGFyciwgdGFyZ2V0KTsKCiAgICAgICAgaWYgKHVwcGVyQm91bmRJbmRleCA8IGFyci5sZW5ndGgpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcHBlciBib3VuZCBvZiAiICsgdGFyZ2V0ICsgIiBpcyBhdCBpbmRleCAiICsgdXBwZXJCb3VuZEluZGV4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVwcGVyIGJvdW5kIG9mICIgKyB0YXJnZXQgKyAiIGlzIG5vdCBmb3VuZCBpbiB0aGUgYXJyYXkuIG4gPSAiICsgYXJyLmxlbmd0aCk7CiAgICAgICAgfQogICAgfQp9Cg==