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

Day 41 || 1049. 最后一块石头的重量 II 、494. 目标和、474.一和零

1049. 最后一块石头的重量 II

题目链接:力扣题目链接

思路:和“416. 分割等和子集”思路一致,也就其实想知道分开的两个部分最小差距是多少,求石头质量除以二作为背包容量,最后返回值就是总数减去 两倍所装下的质量,即分来的两部分质量的差距。

494. 目标和

题目链接:力扣题目链接

思路:可与看作分割两部分一个全加一个全减,凑全加之和即可,也就是(sum+target)/2,二维数组横向是每个值,纵向是背包大小,这个需要累加每次,dp[0][0]要设定为1。j<num 就 dp[i][j]=dp[i-1][j],否则dp[i][j] = dp[i - 1][j] + dp[i - 1][j - num]。一维就是只要大于等于j就dp[j]+= dp[j - num]。

474.一和零

题目链接:力扣题目链接

思路:创建一个二维的dp,这个dp两个维度分别是0和1能装入的大小,dp的值就是当前0和1能装入最多的数量。

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        int[][] dp = new int[m+1][n+1];
        for(String str : strs){
            int x = 0,y = 0;
            for (char ch : str.toCharArray()) {
                if (ch == '0') {
                    x++;
                } else if (ch == '1') {
                    y++;
                }
            }
            for(int i=m;i>=x;i--){
                for(int j=n;j>=y;j--){
                    dp[i][j] = Math.max(dp[i][j],dp[i-x][j-y]+1);
                }
            }
        }
        return dp[m][n];

        
    }
}

时间:3h


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

相关文章:

  • 文件系统上云的挑战
  • 算法【Java】—— 动态规划之斐波那契数列模型
  • 语言模型的采样方法
  • 继承的内容
  • 杂货 | 每日资讯 | 2024.11.1
  • 深度学习基础—语言模型和序列生成
  • 机器学习之fetch_olivetti_faces人脸识别--基于Python实现
  • 数据智能驱动金融策略优化:民锋智能分析技术的应用
  • 深度学习-38-基于PyTorch的卷积神经网络AlexNet
  • 【Java笔记】1-JDK/JRE/JVM是个啥?
  • Golang | Leetcode Golang题解之第518题零钱兑换II
  • pgsql数据量大之后可能遇到的问题
  • SpringCloudAlibaba实战入门之OpenFeign高级用法(十)
  • 数据结构-二叉树中的递归
  • [每周一更]-(第121期):模拟面试|微服务架构面试思路解析
  • 虚函数和纯虚函数是 C++ 中实现多态性的关键概念
  • 【算法笔记】位运算算法原理深度剖析
  • 单向函数、单向陷门函数、困难问题
  • PHP的 CSRF、XSS 攻击和防范
  • promise的catch放在then前面的场景
  • OpenGL入门003——使用Factory设计模式简化渲染流程
  • 从零开始的c++之旅——继承
  • SMTP协议,即简单邮件传输协议
  • 20241031 Apache2修改日志里面的时间格式
  • SQL Server 2008 R2 详细安装教程及错误解决教程
  • 数据结构-链表【chapter1】【c语言版】