首页 > 编程语言 >代码随想录算法训练营第42天 | 1049. 最后一块石头的重量 II 、494. 目标和 、474.一和零

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

时间:2024-06-19 09:13:53浏览次数:29  
标签:return 随想录 42 number param let 474 com dp

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

本题就和 昨天的 416. 分割等和子集 很像了,可以尝试先自己思考做一做。
视频讲解:https://www.bilibili.com/video/BV14M411C7oV
https://programmercarl.com/1049.最后一块石头的重量II.html

这三体=题都没啥思路
/**
 * @param {number[]} stones
 * @return {number}
 */
var lastStoneWeightII = function(stones) {
    let sum = 0;
    for (let i=0;i<stones.length;i++) {
        sum+=stones[i];
    }
    let target = Math.floor(sum/2);

    const dp = new Array(target+1).fill(0);
    for (let i=0;i<stones.length;i++) {
        for (let j=target;j>=stones[i];j--) {
            dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);
        }
    }
    return sum-dp[target] - dp[target];
};
  1. 目标和
    大家重点理解 递推公式:dp[j] += dp[j - nums[i]],这个公式后面的提问 我们还会用到。
    视频讲解:https://www.bilibili.com/video/BV1o8411j73x
    https://programmercarl.com/0494.目标和.html
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var findTargetSumWays = function(nums, target) {
    let sum = 0;
    for (let i=0;i<nums.length;i++) {
        sum+=nums[i];
    }
    if (Math.abs(target)>sum) {
        return 0;
    }
    if ((sum+target)%2===1) {
        return 0;
    }

    let left = (sum+target)/2;

    const dp = new Array(left+1).fill(0);
    dp[0] = 1;

    for (let i=0;i<nums.length;i++) {
        for (let j=left;j>=nums[i];j--) {
            dp[j] += dp[j-nums[i]];
        }
    }
    return dp[left];
};

474.一和零
通过这道题目,大家先粗略了解, 01背包,完全背包,多重背包的区别,不过不用细扣,因为后面 对于 完全背包,多重背包 还有单独讲解。
视频讲解:https://www.bilibili.com/video/BV1rW4y1x7ZQ
https://programmercarl.com/0474.一和零.html

/**
 * @param {string[]} strs
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var findMaxForm = function(strs, m, n) {
    const dp = new Array(m+1).fill(0).map(()=>new Array(n+1).fill(0));
    for (let str of strs) {
        let x = 0;
        let y = 0;
        for (let k=0;k<str.length;k++) {
            if (str[k] === '0'){
                x++;
            } else {
                y++;
            }
        }

        for (let i=m;i>=x;i--) {
            for(let j=n;j>=y;j--) {
                dp[i][j] = Math.max(dp[i][j], dp[i-x][j-y]+1);
            }
        }
    }
    return dp[m][n];
};

标签:return,随想录,42,number,param,let,474,com,dp
From: https://www.cnblogs.com/yuanyf6/p/18255455

相关文章

  • 代码随想录第12天 | 栈与队列part02(有题目未解决)
    题目:150.逆波兰表达式求值思路:1.使用栈,存储数字,遇到运算符,则取出栈顶两个数进行运算,结果在存入栈中。坑:加减乘除运算符没有别的技巧,就是if相等然后+-*/,switch也可以栈使用longlong型,int型会溢出使用"+"不是单引号'+',vector<string类型>不是vector<char类型>编......
  • 代码随想录 算法训练营day11 Leetcode150 逆波兰表达式求值 Leetcode239 滑动窗口最大
    Leetcode150逆波兰表达式求值题目链接栈classSolution{publicintevalRPN(String[]tokens){Deque<Integer>stack=newLinkedList();for(Strings:tokens){if("+".equals(s)){//leetcode内置jdk的问题,不能使用==......
  • 代码随想录算法训练营第四十一天 | 0-1背包问题
    46.携带研究材料二维数组题目链接文章讲解视频讲解动态规划五部曲:dp[i][j]:下标i表示背包装0-i的物品(任取),j表示当前背包的最大容量,dp[i][j]表示容量为j时,装0-i的物品的最大价值递推公式:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])dp[i-1][j]表示j......
  • 代码随想录第四十一天 | 59.斐波那契数列,70.爬楼梯,71.使用最小花费爬楼梯
     59.斐波那契数列看完想法:虽然是最简单的动态规划问题,但还是要按照五部曲来分析intfib(intn){if(n<=1)returnn;vector<int>dp(n+1);//用n+1的原因是,定义数组时这个意思是数组的长度,n+1的话最后一个就是dp[n]dp[0]=0;......
  • zabbix“专家坐诊”第242期问答
    问题一Q:snmp检查用的什么性能啊?设备多了就检测失败,实际是能通的。A:把大批量请求取消,把异常获取不到的监控项都禁用Q:是这个吧,显示不一样。A:什么版本?用的是v3吗?把异常获取不到的监控项都禁用。Q:appliance6.4,用的v3,获取异常的也是我要监控的,我都得开启。A:这几台原本是通的是......
  • 代码随想录算法训练营第38天|● 理论基础 ● 509. 斐波那契数● 70. 爬楼梯 ● 746.
    动态规划理论基础动态规划,英文:DynamicProgramming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,动态规划做题步骤确定dp数组(dptable)以及......
  • 代码随想录第10天 | 栈与队列part01
    题目:232.用栈实现队列思路:1.使用双栈,一个作为输入,一个作为输出代码:classMyQueue{private:stack<int>A,B;public:MyQueue(){}voidpush(intx){A.push(x);}intpop(){//删除A栈底元素并返回元素intresult=this->p......
  • 代码随想录第11天 | ●字符串总结 ●双指针回顾
    字符串总结字符串是若干字符组成的有限序列,也叫字符数组。C语言中,把字符存入数组,以结束符'\0'为结束标志,'\0'可作为判断依据c++中,提供string类,string类提供各种接口,其中size()可作为结束判断标志。vector<char>和string相差不大,string类提供处理字符串的接口更多字符串类......
  • 代码随想录算法训练营第15天 |
    代码随想录算法训练营第15天翻转二叉树https://leetcode.cn/problems/invert-binary-tree/description/翻转二叉树代码随想录https://programmercarl.com/0226.翻转二叉树.html对称二叉树题https://leetcode.cn/problems/symmetric-tree/对称二叉树代码随想录https://pro......
  • 代码随想录算法训练营第39天 | 62.不同路径 、63. 不同路径 II
    今天开始逐渐有dp的感觉了,前两题不同路径,可以好好研究一下,适合进阶详细布置62.不同路径本题大家掌握动态规划的方法就可以。数论方法有点非主流,很难想到。https://programmercarl.com/0062.不同路径.html视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu/***@p......