LeetCode_374. Guess Number Higher or Lower

给你一囗甜甜゛ 提交于 2019-12-04 09:45:00

 

374. Guess Number Higher or Lower

Easy

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'll tell you whether the number is higher or lower.

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

-1 : My number is lower
 1 : My number is higher
 0 : Congrats! You got it!

Example :

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

 

package leetcode.easy;
/* The guess API is defined in the parent class GuessGame.
@param num, your guess
@return -1 if my number is lower, 1 if my number is higher, otherwise return 0
   int guess(int num); */

class GuessGame {
	public int guess(int num) {
		if (6 > num) {
			return -1;
		} else if (6 == num) {
			return 0;
		} else {
			return 1;
		}
	}
}

public class GuessNumberHigherOrLower extends GuessGame {
	public int guessNumber1(int n) {
		for (int i = 1; i < n; i++) {
			if (guess(i) == 0) {
				return i;
			}
		}
		return n;
	}

	public int guessNumber2(int n) {
		int low = 1;
		int high = n;
		while (low <= high) {
			int mid = low + (high - low) / 2;
			int res = guess(mid);
			if (res == 0) {
				return mid;
			} else if (res < 0) {
				high = mid - 1;
			} else {
				low = mid + 1;
			}
		}
		return -1;
	}

	public int guessNumber3(int n) {
		int low = 1;
		int high = n;
		while (low <= high) {
			int mid1 = low + (high - low) / 3;
			int mid2 = high - (high - low) / 3;
			int res1 = guess(mid1);
			int res2 = guess(mid2);
			if (res1 == 0) {
				return mid1;
			}
			if (res2 == 0) {
				return mid2;
			} else if (res1 < 0) {
				high = mid1 - 1;
			} else if (res2 > 0) {
				low = mid2 + 1;
			} else {
				low = mid1 + 1;
				high = mid2 - 1;
			}
		}
		return -1;
	}

	@org.junit.Test
	public void test() {
		GuessNumberHigherOrLower guessNumberHigherOrLower = new GuessNumberHigherOrLower();
		System.out.println(guessNumberHigherOrLower.guessNumber1(10));
		System.out.println(guessNumberHigherOrLower.guessNumber2(10));
		System.out.println(guessNumberHigherOrLower.guessNumber3(10));
	}
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!