LeetCode - Easy - 374. Guess Number Higher or Lower

Topic

  • Binary Search

Description

https://leetcode.com/problems/guess-number-higher-or-lower/

We are playing the Guess Game. The game is as follows:

I pick a number from 1 to n. You have to guess which number I picked.

Every time you guess wrong, I will tell you whether the number I picked is higher or lower than your guess.

You call a pre-defined API int guess(int num), which returns 3 possible results:

  • -1: The number I picked is lower than your guess (i.e. pick < num).
  • 1: The number I picked is higher than your guess (i.e. pick > num).
  • 0: The number I picked is equal to your guess (i.e. pick == num). Return the number that I picked.

Example 1:

Input: n = 10, pick = 6
Output: 6

Example 2:

Input: n = 1, pick = 1
Output: 1

Example 3:

Input: n = 2, pick = 1
Output: 1

Example 4:

Input: n = 2, pick = 2
Output: 2

Constraints:

  • 1 <= n <= 2³¹ - 1
  • 1 <= pick <= n

Analysis

Submission

class GuessGame {
	public static int pick;

	public int guess(int num) {
		return pick == num ? 0 : pick < num ? -1 : 1;
	}
}

public class GuessNumberHigherOrLower extends GuessGame {

	public int guessNumber(int n) {
		int left = 1, right = n;

		while (left <= right) {
			int mid = left + (right - left) / 2;
			int guess = guess(mid);

			if (guess < 0)
				right = mid - 1;
			else if (guess > 0)
				left = mid + 1;
			else
				return mid;
		}

		return -1;
	}
}

Test

import static org.junit.Assert.*;
import org.junit.Test;

public class GuessNumberHigherOrLowerTest {

	@Test
	public void test() {
		GuessNumberHigherOrLower obj = new GuessNumberHigherOrLower();

		assertEquals(GuessGame.pick = 6, obj.guessNumber(10));
		assertEquals(GuessGame.pick = 1, obj.guessNumber(1));
		assertEquals(GuessGame.pick = 1, obj.guessNumber(2));
		assertEquals(GuessGame.pick = 2, obj.guessNumber(2));
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章