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 (-1, 1, or 0):
-1 : My number is lower
1 : My number is higher
0 : Congrats! You got it!
Example:
n = 10, I pick 6.
Return 6.
代码如下:
package org.fan.learn;
/**
* Created by thinkpad on 2016/9/15.
*/
public class GuessNumber {
public static int guess(int num, int target) {
if (num == target) {
return 0;
} else if (target < num) {
return -1;
} else {
return 1;
}
}
public static int guessNumber(int n, int target) {
int start = 1;
int end = n;
int mid = -1;
while (start <= end) {
//注意:移位运算的优先级比算数运算的优先级低
mid = start + ((end-start) >>> 1);
int res = guess(mid, target);
if (res == 0) {
//恰好相等
return mid;
} else if (res == -1) {
//my number is lower
end = mid - 1;
} else {
//my number is higher
start = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
System.out.println(guessNumber(10, 6));
}
}