动态规划
动态规划
daladongba
这个作者很懒,什么都没留下…
展开
-
leetcode - Unique Binary Search Trees II - Java
题目描述:输入一个数字,输出所有可能的BST,1…n。Example:Input: 3Output:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]Explanation:The above output corresponds to the 5 unique BST’s shown below: 1 3 3 2 1 \原创 2020-12-09 16:51:01 · 101 阅读 · 0 评论 -
leetcode - Jump Game - java
题目描述:给定一个数组,从index为0开始,每次最大可以跳nums[index]步,能跳到index为length-1为true,不能则为false。Input: nums = [2,3,1,1,4]Output: trueExplanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.方法一:贪心算法,不断更新lastPos,判断当前点能否跳到lastPos,能跳到则将当前点设置为lastPos,直到las原创 2020-11-30 17:06:43 · 127 阅读 · 0 评论 -
leetcode-整数拆分-Java
题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。思路:众所周知将一个数尽可能多地分为3,这样的乘积最大,但如果一个数分为了3+1,那么需要将其转换为2+2,因为31 < 22。此题O(n)解法如下:class Solution原创 2020-07-30 10:05:01 · 362 阅读 · 0 评论 -
leetcode-300/673上升子序列-Java
遇到两个比较类似的动态规划题目No.300:题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路:定义一个dp[i] 表示以 nums[i] 这个数结尾的最长递增子序列的长度。而dp[i] = Math.max(dp[i], dp[j] + 1); (0<= j <i)。该问题的主要解决是确定dp要存储什么内容确定好dp存储原创 2020-07-22 22:55:30 · 129 阅读 · 0 评论 -
leetcode-最大子序和-Java
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思想:动态规划,比如上边的数组 [-2,1,-3,4,-1,2,1,-5,4],我们每遇到前一个是正数就加到当前值上边,将数组转换成[-2,1,-2,4,3,5,6,1,5]这样求最大值,这个是官方给的一个题解,还有另外一个题解使用的分治法,比较复杂。原创 2020-07-21 10:23:16 · 135 阅读 · 0 评论 -
leetcode-非递减数列-Java
题目描述:给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能在只改变一原创 2020-07-20 22:16:35 · 237 阅读 · 1 评论