LeetCode:494.目标和

news/2025/2/2 19:09:34 标签: leetcode, 算法, java, 动态规划

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:494.目标和
给你一个非负整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
示例 1:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3
示例 2:
输入:nums = [1], target = 1
输出:1

  • 0-1背包求的是背包容量为j能装的最大价值
  • 分割等和子集求的是能否装满容量为target的背包
  • 最后一块石头的重量求的是容量为target的背包能装的最大重量是多少
  • 目标和求的是容量为target的背包装满有多少种方式,递推公式:dp[j] += dp[j - nums[i]]
  • 本题中,设所有添加+符号的和为left,所有添加-符号的和为right,有left + right = sumleft - right = target,则left = (sum + target) / 2
  • dp[j]含义:装满容量为j的背包的方法数有dp[j]
  • 如果不选nums[i]dp[j] = dp[j],如果选nums[i]时,dp[j] = dp[j -num[i], 所以递推公式:dp[j] = dp[j] + dp[j - nums[i]] ,即:dp[j] += dp[j - nums[i]]
  • 初始化:装满容量为0的背包的方法数有1中,所以dp[0] = 1
java">	public int findTargetSumWays(int[] nums, int target) {
        int sum = Arrays.stream(nums).sum();
        // 如果target的绝对值大于sum,则说明目标和一定不会为target的
        if (Math.abs(target) > sum)
            return 0;
        if ((target + sum) % 2 != 0)
            return 0;
        int bagSize = (target + sum) / 2;
        int[] dp = new int[bagSize + 1];
        dp[0] = 1;
        for (int i = 0; i < nums.length; i++) {
            for (int j = bagSize; j >= nums[i]; j--) {
                dp[j] += dp[j - nums[i]];
            }
        }
        return dp[bagSize];
    }

http://www.niftyadmin.cn/n/5840238.html

相关文章

计算机视觉:解锁智能时代的钥匙与实战案例

计算机视觉&#xff1a;解锁智能时代的钥匙与实战案例 在人工智能的浩瀚星空中&#xff0c;计算机视觉无疑是最为璀璨的星辰之一。它不仅让机器拥有了“看”的能力&#xff0c;更是推动了自动驾驶、安防监控、医疗影像分析、智能制造等多个领域的革新。本文将深入探讨计算机视…

25届 信息安全领域毕业设计选题88例:前沿课题

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

上手DeepSeek大模型:本地化安装部署,确保数据不泄露

摘要&#xff1a;过年前DeepSeek横空出世&#xff0c;在世界范围内掀起AI狂潮&#xff0c;成了大家茶余饭后的话题。对于普通人怎样使用这个大模型呢&#xff1f;这篇文章来上手实践。 使用DeepSeek最简单的办法就是使用在线版或者手机版。 - 1 - 使用在线版 在浏览器中输…

线性回归简介:从理论到应用

什么是线性回归&#xff1f; 线性回归是一种用于预测数值型结果的统计方法&#xff0c;它通过建立一个或多个自变量&#xff08;输入特征&#xff09;与因变量&#xff08;输出目标&#xff09;之间的线性关系模型来工作。在最简单的形式中&#xff0c;即简单线性回归&#xf…

AI学习指南HuggingFace篇-模型微调与训练

一、引言 Hugging Face的Transformers库提供了强大的工具,用于对预训练模型进行微调(Fine-tuning),以适应特定的自然语言处理任务。微调是将预训练模型应用于实际应用中的重要步骤,能够显著提升模型在特定任务上的性能。本文将详细介绍如何对Hugging Face中的预训练模型进…

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

SQL进阶实战技巧:断点去重技术详解

目录 一、核心概念 二、典型应用场景 三、实现步骤与SQL示例 场景 目标 步骤 分析 结果 四、核心原理解释 1. 核心原理&#xff1a;相邻比较 2. 去重的本质 3. 与传统方法的对比 4 类别理解 五、如何应对复杂场景&#xff1f; 1. 多字段断点检测 2. 时间窗口断点 …

记6(人工神经网络

目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络&#xff08;Feedforward Neural Networks&#xff09;5、鸢尾花数据集——单层前馈型神经网络&#xff1a;6、多层神经网络&#xff1a;增加隐含层7、实现异或运算&#xff08;01、10为1,00、11为0&#xff09;8、线性…