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));
    	}
    }
    
  • 相关阅读:
    linux环境下安装redis扩展
    LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)
    Linux环境下网卡配置
    MAC 下虚拟主机的配置
    从json_encode过来的的字符串被返回到html页面时的解析
    for循环绑定事件,闭包思想!
    js8月-4号,,思想
    三种添加事件的方式
    smarty第一天
    5秒钟后自动跳转!!!!
  • 原文地址:https://www.cnblogs.com/denggelin/p/11854459.html
Copyright © 2011-2022 走看看