动态规划
weixin_42604028
这个作者很懒,什么都没留下…
展开
-
312-戳气球
1.自顶向下的递归+记忆化搜索class Solution { int[] val; int[][] rec; public int maxCoins(int[] nums) { /** 自顶向下的递归 + 记忆化搜索 思想:逆向思维! 将删除的过程反过来,每次向数组中添加元素并计算每次获得的硬币数 */ int n = nums.length; //给原创 2021-11-16 11:02:15 · 514 阅读 · 0 评论 -
完全背包问题(279,322,518)
322 零钱兑换class Solution { public int coinChange(int[] coins, int amount) { //完全背包问题 // int n = coins.length, max = amount+1; // int[][] dp = new int[n+1][max];//dp[i][j]表示前i个硬币组成j的最少硬币数 // //初始化 // Arrays.fill(d原创 2021-09-29 11:49:42 · 56 阅读 · 0 评论 -
01背包问题(416、494、474、1049)
01背包问题---->动态规划class Solution { public boolean canPartition(int[] nums) { //动态规划(二维!) 01背包问题! int sum = 0, n = nums.length; for(int num : nums){ sum += num; } if(sum % 2 == 1) return f原创 2021-09-17 11:50:12 · 72 阅读 · 0 评论 -
221-最大正方形
动态规划当前正方形的边长由其左方、左上方、上方的正方形边长决定!!class Solution { public int maximalSquare(char[][] matrix) { //动态规划 dp[i][j]表示以m[i][j]为右下角的正方形的边长 int row = matrix.length, col = matrix[0].length; int[][] dp = new int[row][col]; int ma原创 2021-09-09 11:37:20 · 42 阅读 · 0 评论 -
85-最大矩形
单调栈class Solution { public int maximalRectangle(char[][] matrix) { //单调栈 结合第84题! int row = matrix.length, col = 0; if(row > 0) col = matrix[0].length; int[][] dp = new int[row][col]; //dp[i][j]记录第原创 2021-09-04 10:48:08 · 55 阅读 · 0 评论 -
338-比特位计数
动态规划class Solution { public int[] countBits(int n) { //动态规划 找做高有效位 int[] dp = new int[n+1]; dp[0] = 0; int highBit = 0;//记录最近的2的整数幂 for(int i = 1;i < n+1;i++){ if((i & (i-1)) == 0){//满足则说明i是2的原创 2021-09-03 10:52:37 · 54 阅读 · 0 评论 -
72-编辑距离
1.自顶向下的递归超时了,因为递归时进行了很多重复计算class Solution { public int minDistance(String word1, String word2) { /* 操作可以简化为以下3种: 1.对A进行插入 2.对A进行删除 3.对A进行替换 */ //自顶向下的递归 超时。。 //每次比较最后一个字符 if(word原创 2021-09-01 15:47:23 · 49 阅读 · 0 评论 -
买股票(Ⅰ,Ⅱ,Ⅲ,Ⅳ,冷冻期,手续费)
121.买卖股票的最佳时机class Solution { public int maxProfit(int[] prices) { //一次遍历 int minPrice = prices[0]; int maxProfit = 0; for(int i = 1;i < prices.length;i++){ if(prices[i] < minPrice) min原创 2021-08-26 13:50:11 · 68 阅读 · 0 评论 -
单调栈(42、84、739)
核心思想:i处的积水等于左右峰值的最小值减去自身!1.暴力法class Solution { public int trap(int[] height) { //核心思想:i处的积水等于左右峰值的最小值减去自身!!! //暴力法 int n = height.length; int ans = 0; for(int i = 1;i < n-1;i++){ //对于每一个元素,寻找它的左右原创 2021-08-19 13:57:17 · 37 阅读 · 0 评论 -
回文串(5,131,132)
1.动态规划class Solution { public String longestPalindrome(String s) { //难!! //动态规划 int n = s.length(); boolean[][] dp = new boolean[n][n];//dp[i][j]表示s[i...j]是回文串!!! int start = 0, maxLen = 1; char[] str =原创 2021-08-14 12:50:02 · 26 阅读 · 0 评论 -
组合总数(Ⅰ、Ⅱ、Ⅲ、Ⅳ)
组合总数Ⅰ组合总数Ⅱ组合总数Ⅲ回溯法class Solution { //回溯法 List<List<Integer>> ans = new ArrayList<>(); List<Integer> ls = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { f(1原创 2021-08-09 11:36:55 · 52 阅读 · 0 评论 -
91-解码方法
动态规划class Solution { public int numDecodings(String s) { //动规 int n = s.length(); int[] f = new int[n]; f[0] = s.charAt(0) == '0' ? 0 : 1; for(int i = 1;i < n;i++){ if(s.charAt(i) == '0'){原创 2021-08-01 21:46:55 · 86 阅读 · 0 评论