LeetCode:374. Guess Number Higher or Lower

本文详细解析了LeetCode上的第374题“猜数字游戏”的算法实现,通过二分查找的方法来确定目标数字,同时针对可能出现的整数溢出问题给出了有效的解决方案。
 1 package day20170206;
 2 //LeetCode:374. Guess Number Higher or Lower
 3 /*
 4  We are playing the Guess Game. The game is as follows:
 5 I pick a number from 1 to n. You have to guess which number I picked.
 6 Every time you guess wrong, I'll tell you whether the number is higher or lower.
 7 You call a pre-defined API guess(int num) which returns 3 possible results (-1, 1, or 0):
 8 
 9 -1 : My number is lower
10  1 : My number is higher
11  0 : Congrats! You got it!
12 Example:
13 n = 10, I pick 6.
14 
15 Return 6.
16  */
17 public class guessNumber374 {
18     /* The guess API is defined in the parent class GuessGame.
19        @param num, your guess
20        @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
21           int guess(int num); */
22 
23     public static int guessNumber(int n) {
24         if(guess(1)==0)
25             return 1;
26         else if(guess(n)==0)
27             return n;
28         else{
29             int left=1,right=n,mid;
30             while(left<right){
31                 mid=left+(right-left)/2;
32                 if(guess(mid)==0)
33                     return mid;
34                 else if(guess(mid)==1)
35                     left=mid+1;
36                 else 
37                     right=mid-1;
38             }
39             return left;
40         }
41     }
42     public static int guess(int n){
43         int num=1702766719;
44         //int num=6;
45         if(n==num)
46             return 0;
47         else if(n<num)
48             return 1;
49         else
50             return -1;
51     }
52     //竟然超时,然后就自己写了个guess测试,把mid=(left+right)/2换成mid=left+(right-left)/2 
53     //当数值太大,mid就会溢出,然后while语句就死循环了,所以就报超时的错了
54     //题目看了老半天才知道啥意思,也是醉了,guessNumber传入的参数是范围,我们只负责猜,返回的是猜中的数,guess会告诉我们猜的对不对,所以我们的程序要完成的就是猜的这个过程,如何遍历数
55     
56     //study  用(l & r) + ((l ^ r) >> 1)替换left+(right-left)/2 ,表示不能理解啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
57     public static void main(String[] args) {
58         // TODO Auto-generated method stub
59         //System.out.println(guessNumber(10));
60         System.out.println(guessNumber(2126753390));
61     }
62 
63 }

 

转载于:https://www.cnblogs.com/luluqiao/p/6372763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值