• 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));
    	}
    }
    
  • 相关阅读:
    【Excel】获取网页标题的VBA
    【IIS】windows2008 ii7 设置访问网站提示帐号密码登录
    【JS】JQUERY链接符大全
    【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
    CXF远程接口调用 用户名密码校验的方法:
    HTTP 请求/响应 设置/获取 Header参数
    zookeeper 实现分布式锁 demo(新)
    两个 中国标准时间 判断大小
    rabbitMq完整通信(三)---测试类
    rabbitMq完整通信(二)---consumer
  • 原文地址:https://www.cnblogs.com/denggelin/p/11854459.html
Copyright © 2020-2023  润新知