leetcode中等猜数字大小2
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等猜数字大小2相关的知识,希望对你有一定的参考价值。
思路:动态规划
【确保】猜中的【最小】花费
确保–>max
最小–>min
用 dp(i, j)
表示在范围 [i, j]
内确保胜利的最少金额,目标是计算
f(1, n)
。
假设第一次猜的数字是 x 并且猜错,则需要支付金额 x,为了确保胜利还需要支付的金额是 dp(i, x - 1)
或 dp(x + 1, j)
。为了【确保】在哪边选都胜利,应考虑最坏情况,取上述两者的最大值:dp(i,j)=x+max(dp(i,x−1),dp(x+1,j))。
为了得到【最小】,在(i,j)
之间遍历 x ,选取使得dp[i][j]最小的 x 作为分割点。
class Solution {
public int getMoneyAmount(int n) {
int[][]dp=new int[n+1][n+1];
for(int i=n-1;i>=1;i--){
for(int j=i+1;j<=n;j++){
//i==j时,dp[i][j]=0;
dp[i][j]=Integer.MAX_VALUE;
for(int k=i;k<j;k++){
int cur=Math.max(dp[i][k-1],dp[k+1][j])+k;
dp[i][j]=Math.min(dp[i][j],cur);
}
}
}
return dp[1][n];
}
}
以上是关于leetcode中等猜数字大小2的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《二分枚举》简单12 —— LeetCode 374. 猜数字大小