LeetCode-374. Guess Number Higher or Lower
2018-03-24 15:23
246 查看
Description
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.
Solution 1(C++)
// Forward declaration of guess API. // @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 Solution { public: int guessNumber(int n) { int high=n, low=1, gnum=(high-low)/2+low; for(; guess(gnum)!=0; gnum=(high-low)/2+low){ if(guess(gnum)==1) low=gnum+1; else if(guess(gnum)==-1) high=gnum-1; } return gnum; } };
Solution 2(C++)
// Forward declaration of guess API. // @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 Solution { public: int guessNumber(int n) { int maxNumber = n, minNumber = 1; while (true) { int meanNumber = (maxNumber - minNumber) / 2 + minNumber; // Do NOT use (maxNumber+minNumber)/2 in case of over flow int res = guess(meanNumber); if (res == 0) { return meanNumber; } else if (res == 1) { minNumber = meanNumber + 1; } else { maxNumber = meanNumber - 1; } } } };
算法分析
二分查找,简单的逻辑能掌握,只是一点小技巧,二分查找上下限每次更新的时候不能只更新为中间值,而应该是中间值+-1。比如解法一与解法二中的更新high时更新为gnum-1,更新low时更新为gnum+1。程序分析
很重要的就是(maxNumber - minNumber) / 2 + minNumber,这一句。防止过拟合。然后这道题比较坑的就是,阅读理解了。-1 : My number is lower 1 : My number is higher 0 : Congrats! You got it! Here “My” means the number which is given for you to guess not the number you put into guess(int num).
相关文章推荐
- [LeetCode] 374. Guess Number Higher or Lower 猜数字大小
- LeetCode-374. Guess Number Higher or Lower
- LeetCode 374. Guess Number Higher or Lower
- [leetcode] 374. Guess Number Higher or Lower 解题报告
- leetcode 374. Guess Number Higher or Lower 解题小结
- 374.[LeetCode]Guess Number Higher or Lower
- [LeetCode]374. Guess Number Higher or Lower<Binary Search>
- LeetCode 374. Guess Number Higher or Lower
- Python [Leetcode 374]Guess Number Higher or Lower
- leetcode_374. Guess Number Higher or Lower 猜数字是比给定的数字高了还是低了,二分查找法
- [LeetCode]374. Guess Number Higher or Lower【&375. Guess Number Higher or Lower II】
- leetcode 374. Guess Number Higher or Lower
- [Leetcode]374. Guess Number Higher or Lower
- Leetcode374. Guess Number Higher or Lower
- 【一天一道LeetCode】#374. Guess Number Higher or Lower
- Leetcode 374. Guess Number Higher or Lower (Easy) (cpp)
- 【LEETCODE】374- Guess Number Higher or Lower [Python]
- leetcode 374[easy]--- Guess Number Higher or Lower
- LeetCode—374. Guess Number Higher or Lower
- 【一天一道LeetCode】#374. Guess Number Higher or Lower