From f6ac06990e89cf9a77db74126092efd023408c09 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 15 Aug 2024 20:05:14 +0200 Subject: [PATCH] =?UTF-8?q?java:=20add=20=C2=AB374.=20Guess=20Number=20Hig?= =?UTF-8?q?her=20or=20Lower=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- java/guess-number-higher-or-lower.java | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 java/guess-number-higher-or-lower.java diff --git a/java/guess-number-higher-or-lower.java b/java/guess-number-higher-or-lower.java new file mode 100644 index 0000000..59679a8 --- /dev/null +++ b/java/guess-number-higher-or-lower.java @@ -0,0 +1,41 @@ +/** + * Forward declaration of guess API. + * + * @param num your guess + * @return -1 if num is higher than the picked number 1 if num is lower than the picked number + * otherwise return 0 int guess(int num); + */ +class Solution extends GuessGame { + private enum Response { + Smaller(-1), + Exact(0), + Bigger(1); + + public final int value; + + private Response(int value) { + this.value = value; + } + } + + public int guessNumber(int n) { + int lower = 1; + int upper = n; + + while (true) { + var mid = lower + (upper - lower) / 2; + + int response = guess(mid); + if (response == Response.Exact.value) { + return mid; + } else if (response == Response.Smaller.value) { + upper = mid - 1; + } else if (response == Response.Bigger.value) { + lower = mid + 1; + } else { + // invalid response + return -1; + } + } + } +}