【代码随想录算法训练营第四十三天 | LeetCode1049. 最后一块石头的重量 II 、494. 目标和、474.一和零】

代码随想录算法训练营第四十三天 | LeetCode1049. 最后一块石头的重量 II 、494. 目标和、474.一和零


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

解题代码C++:

cpp 复制代码
class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) {
        vector<int> dp(15001, 0);
        int sum = 0;
        for (int i = 0; i < stones.size(); i++) sum += stones[i];
        int target = sum / 2;
        for (int i = 0; i < stones.size(); i++) { // 遍历物品
            for (int j = target; j >= stones[i]; j--) { // 遍历背包
                dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
            }
        }
        return sum - dp[target] - dp[target];
    }
};

题目链接/文章讲解/视频讲解:
https://programmercarl.com/1049.最后一块石头的重量II.html



二、494. 目标和

解题代码C++:

cpp 复制代码
class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int S) {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) sum += nums[i];
        if (abs(S) > sum) return 0; // 此时没有方案
        if ((S + sum) % 2 == 1) return 0; // 此时没有方案
        int bagSize = (S + sum) / 2;
        vector<int> dp(bagSize + 1, 0);
        dp[0] = 1;
        for (int i = 0; i < nums.size(); i++) {
            for (int j = bagSize; j >= nums[i]; j--) {
                dp[j] += dp[j - nums[i]];
            }
        }
        return dp[bagSize];
    }
};

题目链接/文章讲解/视频讲解:
https://programmercarl.com/0494.目标和.html



三、474.一和零

解题代码C++:

cpp 复制代码
class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
        vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0)); // 默认初始化0
        for (string str : strs) { // 遍历物品
            int oneNum = 0, zeroNum = 0;
            for (char c : str) {
                if (c == '0') zeroNum++;
                else oneNum++;
            }
            for (int i = m; i >= zeroNum; i--) { // 遍历背包容量且从后向前遍历!
                for (int j = n; j >= oneNum; j--) {
                    dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
                }
            }
        }
        return dp[m][n];
    }
};

题目链接/文章讲解/视频讲解:
https://programmercarl.com/0474.一和零.html

相关推荐
flashlight_hi2 分钟前
LeetCode 分类刷题:110. 平衡二叉树
javascript·算法·leetcode
式5163 分钟前
线性代数(九)线性相关性、基与维数
线性代数·算法·机器学习
啊阿狸不会拉杆4 分钟前
《数字图像处理》第7章:小波变换和其他图像变换
图像处理·人工智能·python·算法·机器学习·计算机视觉·数字图像处理
炽烈小老头5 分钟前
【 每天学习一点算法 2025/12/17】验证二叉搜索树
学习·算法
用户2719953721311 分钟前
基于Label Studio 集成视觉大模型Qwen2-VL和yolo实现自动标注
算法
智者知已应修善业32 分钟前
【删除有序数组中的重复项 II之O(N)算法】2024-1-31
c语言·c++·经验分享·笔记·算法
patrickpdx41 分钟前
leetcode:环形链表
算法·leetcode·链表
资深web全栈开发43 分钟前
LeetCode 3652: 按策略买卖股票的最佳时机
算法·leetcode·职场和发展
Wang ruoxi1 小时前
基于最小二乘法的离散数据拟合
人工智能·算法·机器学习
Xの哲學1 小时前
Linux链路聚合深度解析: 从概念到内核实现
linux·服务器·算法·架构·边缘计算