当前位置: 首页 > article >正文

动态规划理论基础和习题【力扣】【算法学习day.24】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.不同的二叉搜索树

题目链接:96. 不同的二叉搜索树 - 力扣(LeetCode)

题面:

代码:

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 + 1; i++)
            for(int j = 1; j < i + 1; j++) 
                dp[i] += dp[j-1] * dp[i-j];
        
        return dp[n];
    }
}

2.分割等和子集

题目链接:416. 分割等和子集 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public boolean canPartition(int[] nums) {
        int s = 0;
        for (int num : nums) {
            s += num;
        }
        if (s % 2 != 0) {
            return false;
        }
        int n = nums.length;
        int[][] memo = new int[n][s / 2 + 1];
        for (int[] row : memo) {
            Arrays.fill(row, -1); // -1 表示没有计算过
        }
        return dfs(n - 1, s / 2, nums, memo);
    }

    private boolean dfs(int i, int j, int[] nums, int[][] memo) {
        if (i < 0) {
            return j == 0;
        }
        if (memo[i][j] != -1) { // 之前计算过
            return memo[i][j] == 1;
        }
        boolean res = j >= nums[i] && dfs(i - 1, j - nums[i], nums, memo) || dfs(i - 1, j, nums, memo);
        memo[i][j] = res ? 1 : 0; // 记忆化
        return res;
    }
}

后言

上面是动态规划的基本概念和部分习题,下一篇会有其他习题,希望有所帮助,一同进步,共勉!   


http://www.kler.cn/a/388267.html

相关文章:

  • NVIDIA NIM 简介
  • WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
  • 用户裂变数据分析
  • Android HandlerThread 基础
  • 攻防世界37-unseping-CTFWeb
  • .NET中通过C#实现Excel与DataTable的数据互转
  • 向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法
  • 基于python的天气数据采集与可视化分析,对20个城市的天气适宜出行度分析
  • Spring声明式事务 编程式事务
  • 天云数据战略签约浪潮 成为浪潮智慧城市银河联盟2024优秀战略合作伙伴
  • bert-base-uncased处理文档
  • 华为eNSP实验:IP Source Guard
  • 0. 渲染游戏画面
  • 医学可视化之涟漪图
  • 【51单片机】I2C总线详解 + AT24C02
  • Python中的常见配置文件写法
  • 数据结构-串
  • 【论文笔记】Parameter-Efficient Transfer Learning for NLP
  • 软件设计师:排序算法总结
  • ReactPress数据库表结构设计全面分析
  • 前端学习之ES6+
  • 七大经典基于比较排序算法【Java实现】
  • Elasticsearch实战应用:打造高效的全文搜索与高亮显示功能
  • Python实现粒子滤波算法
  • 1024程序员节|借势AI,写出牛码
  • jmeter常用配置元件介绍总结之jsr223执行python脚本