• 375猜数字大小II


    题目:我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。

    来源:https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii/

    法一:参考别人后自己的代码 

    思路:动态规划   这个题不是简单的二分法,而是先取一个数分割后,取左右两边的最大值,最后再取最小值,注意动态规划问题一定要先定义dp数组,再列几个简单情况的表,切忌不动手空想。这个题里处理边界条件方法是:不处理长度为1和2的数组,至少从3开始处理。

    class Solution:
        def getMoneyAmount(self, n: int) -> int:
            dp = [[0] * n for i in range(n)]
            for i in range(n-1):
                dp[i][i+1] = i+1
            for start_col in range(2,n):
                row = 0
                for col in range(start_col, n):
                    # 这里是关键,先取最大值,后取最小值
                    dp[row][col] = min( max(dp[row][i-1], dp[i+1][col]) + (i+1) for i in range(row+1, col))
                    row += 1
            return dp[0][-1]
    if __name__ == '__main__':
        duixiang = Solution()
        # a = duixiang.getMoneyAmount(n=20)
        # a = duixiang.getMoneyAmount(n=10)
        # a = duixiang.getMoneyAmount(n=5)
        a = duixiang.getMoneyAmount(n=1)
        print(a)
    View Code

    法二:最开始的方法

    思路:利用递归,每次拆分后取左右两边中的最大值,再取不同拆分方法中的最小值,

  • 相关阅读:
    基于ObjectCache的应用
    数学趣题——验证角谷猜想
    数学趣题——递归法寻找最小值
    数学趣题——寻找同构数
    数学趣题——表示成两个数的平方和
    数学趣题——马克思手稿中的数学题
    数学趣题——具有特殊性质的数
    数学趣题——验证四方定理
    数学趣题——连续整数固定和问题
    数学趣题——验证尼克彻斯定理
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12284262.html
Copyright © 2020-2023  润新知