动态规划
qq_39717513
这个作者很懒,什么都没留下…
展开
-
42. 接雨水
思路:动态规划:int[] maxleft+int[] maxright 求每一列的水,我们只需要关注当前列,以及左边最高的墙,右边最高的墙就够了。 装水的多少,当然根据木桶效应,我们只需要看左边最高的墙和右边最高的墙中较矮的一个就够了。 class Solution { public int trap(int[] height) { if (height.length==0||height==null)return 0; int ans=0; int len=height.le.原创 2021-08-15 10:57:49 · 53 阅读 · 0 评论 -
300. 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 动态规划 1、dp[i] 表示:以 nums[i] 结尾 的「上升子序列」的长度。注意:这个定义中 nums[i] 必须被选取,且必须是这个子序列的最后一个元素; 2、如果一个较大的数接在较小的数后面,就会形成一个更长的子序列。只要 nums[i] 严格大于在它位置之前的某个数,那么 nums[i] 就可以接在这个数后面形成一个更长的上升子序列 3、初始化: dp[i] = 1,11 个字符显然是长度为 11 的上升子序列。 4、 输出:转载 2021-08-14 15:02:10 · 85 阅读 · 0 评论 -
买卖股票问题-动态规划
121. 买卖股票的最佳时机(只能买一次) public class Solution { public int maxProfit(int[] prices) { int len = prices.length; // 特殊判断 if (len < 2) { return 0; } int[][] dp = new int[len][2]; // dp[i][0] 下标原创 2021-07-19 22:52:40 · 154 阅读 · 2 评论 -
42. 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 思路 对于数组中的每个元素,我们找出下雨后水能达到的最高位置,等于两边最大高度的较小值减去当前高度的值。 public int trap(int[] height) { if (height == null || height.length == 0) return 0; int ans = 0; int size = height.length; int[]转载 2021-07-15 09:10:23 · 50 阅读 · 0 评论 -
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。 中心扩散法+动态规划 用一个 boolean dp[l][r] 表示字符串从 i 到 j 这段是否为回文。试想如果 dp[l][r]=true,我们要判断 dp[l-1][r+1] 是否为回文。只需要判断字符串在(l-1)和(r+1)两个位置是否为相同的字符,减少了很多重复计算。 动态规划关键是找到初始状态和状态转移方程。 初始状态,l=r 时,此时 dp[l][r]=true。 状态转移方程,dp[l][r]=true 并且(l-1)和(r+1)两个位置转载 2021-07-12 22:50:10 · 101 阅读 · 0 评论