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));
}
}

最新文章

  1. js中创建数组的方法
  2. android 动态设置Framelayout,view,imageView,Layout高度
  3. Java 基础【10】 I/O流概念分析整理
  4. QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
  5. GitLab安装说明
  6. oracle断电重启之ORA-00600[4194]
  7. DataTable 中Distinct操作
  8. USB Packet Types
  9. 微信/QQ机器人的实现
  10. sqlite 获取数据库中的所有表
  11. Java客户端Jedis的八种调用方式
  12. sqlserver字符串拆分(split)方法汇总
  13. 【Sort】RadixSort基数排序
  14. MySql数据库第一天
  15. session多服务器共享的方案
  16. 完美解决--用VS中的Git做代码管理器,与他人共享代码
  17. C# DataGridView 的UserDeletingRow事件,删除
  18. LAMP源码安装,搭建zabbix监控
  19. 第26月第7天 mac如何matplotlib中文乱码问题
  20. shell-awk详细笔记

热门文章

  1. 图中长度为k的路径的计数
  2. python - django (logging 日志配置和简单使用)
  3. HDU - 3709 - Balanced Number(数位DP)
  4. 学习Spring-Data-Jpa(六)---spring-data-commons中的repository
  5. 洛谷 P816 忠诚 题解
  6. learning java AWT 布局管理器FlowLayout
  7. XOR Clique(按位异或)
  8. Java 基础:抽象类与接口
  9. 小程序wepy购物车的逻辑
  10. 如何在Fluent使用非牛顿流体【转载】