leetcode 374&375. Guess Number Higher or Lower

来源:互联网 发布:如何查看mac os版本 编辑:程序博客网 时间:2024/06/12 01:32
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.

374比较简单,就是一个二分搜索

public class Solution extends GuessGame {    public int guessNumber(int n) {        int low = 1;        int high = n;        int mid = 0;        while(low <= high){            mid = low + (high - low)/2;            int res = guess(mid);            if(res==0){                return mid;            }else if(res>0){                low = mid+1;            }else{                high = mid-1;            }        }        return low;    }}

375二分搜索不一定是最好的结果,所以不能采用二分搜索来求。
采用动态规划
dp[i][j]表示从i~j中的最少花费
对于 x 属于i~j,如果是x,那么花费为x + max(dp[i][x-1], dp[x+1][j])

在最小化这个花费即为dp[i][j]

public class Solution {    public int getMoneyAmount(int n) {        if(n < 2) return 0;        int[][] dp = new int[n+1][n+1];        return helper(dp, 1, n);    }    public int helper(int[][] dp, int l, int h){        if(l >= h) return 0;        if(dp[l][h]!=0) return dp[l][h];        int res = Integer.MAX_VALUE;        for(int i=l; i <=h; i++){            int t = i + Math.max(helper(dp, l, i-1), helper(dp, i+1, h));            res = Math.min(res, t);        }        dp[l][h] = res;        return res;    }}
原创粉丝点击