动态规划动态规划

Leetcode题解(DP 问题)

2017-03-16  本文已影响0人  walker_liu_fei

Unique Binary Search Trees

给定一个数组,含有 n 个数的数组(连续的 1 - n),利用这N个数组建一个 二叉树,求能够构建二叉树的数量,例如 n = 3 能够构建的二叉树数量为 5


    public class Solution {
        public int numTrees(int n) {
         int[] dp = new int[n + 1];
            dp[0] = 1;
            dp[1] = 1;
            for (int i = 2; i <= n; i++)
                for (int j = 1; j <= i; j++) //表示在每个小于 i 的值在做root节点时,其值
                    dp[i] += dp[j - 1] * dp[i - j];
            return dp[n];
        }
    }

Maximum Product Subarray

给定一个数组,有正的也有负的,求一个连续的最大乘积区间, 例如给定 [2,3,-2,4],最大区间就是 [2,3],为6.求最大的这个值


    func maxProduct(nums []int) int {
        if (len(nums) < 1){
            return 0
        }
        max := nums[0]
        min := nums[0]
        result := max
        for index := 1;index < len(nums); index ++{
            num := nums[index]
            //作为临时记录,方式变更
            temp := max
            //最大值,和最小值都记录下来,因为接下来很有可能翻转
            max = int(math.Max(math.Max(max * num,min * num),num))  
            min = int(math.Min(math.Min(min * num,temp * num),num)) //最小值
            if (max > result){
                result = max
            }
        }
        return result
    }

最大连续区间

01背包问题

上一篇下一篇

猜你喜欢

热点阅读