zoukankan      html  css  js  c++  java
  • LeetCode_374. Guess Number Higher or Lower

    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));
    	}
    }
    
  • 相关阅读:
    Sicily 1795 Table tennis
    【转】关于使用printf和scanf对short进行输入输出的一段有趣对话
    Sicily 1561 PRIME
    【读书笔记】the TeXBook 1
    Sicily 1934 移动小球
    Sicily 1817 校歌手大奖赛
    个人总结flex各种用法(转)
    ActionScript3编译运行
    Flash & Flex组件优化的杀手锏callLater
    readResolve()方法与串行化
  • 原文地址:https://www.cnblogs.com/denggelin/p/11854459.html
Copyright © 2011-2022 走看看