494-目标和(01背包)

科研——BIBM论文修改和提交 BIBM的相关操作流程汇总 阅读详情

题目

给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。

返回可以使最终数组和为目标数 S 的所有添加符号的方法数。

示例:

输入:nums: [1, 1, 1, 1, 1], S: 3
输出:5
解释:

-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

一共有5种方法让最终目标和为3。

题解一(二叉树)

class Solution {
    int count=0;
    public int findTargetSumWays(int[] nums, int target) {
        dfs(nums,target,0);
        return count;
    }
    public void dfs(int[] nums,int target,int i){
        //i是用来记录循环次数和i所在的位置的nums数组值的
        if(i==nums.length&&target==0){
            count++;
            return;
        }
        if(i<nums.length){
            dfs(nums,target-nums[i],i+1);//注意:循环调用只能用+1!不能用++,栈会溢出!原因不明?
            dfs(nums,target+nums[i],i+1);
        }
    }
}

思路:

  1. 二叉树:

                        0
            -1           +1      
      -1    +1    -1       +1
       .......            ......        ...
    

题解二(dp)

class Solution {
    public int findTargetSumWays(int[] nums, int target) {
        int sum=0;
        for(int num:nums){
            sum+=num;
        }
        if(target>sum||(sum+target)%2==1){
            return 0;
        }
        int newTarget=(sum+target)/2;
        int[] dp=new int[newTarget+1];
        dp[0]=1;
        for(int num:nums){
            for(int j=newTarget;j>=num;j--){
                dp[j]=dp[j]+dp[j-num];
            }
        }
        return dp[newTarget];
    }
}

思路:

  1. 复杂度分析

    • 时间复杂度:O(n * target)O(n∗targe**t)
    • 空间复杂度:O(target)O(targe**t)
  2. 思路

    • 01背包问题是选或者不选,但本题是必须选,是选+还是选-。先将本问题转换为01背包问题。
    • 假设所有符号为+的元素和为x,符号为-的元素和的绝对值是y。
      我们想要的 S = 正数和 - 负数和 = x - y
      而已知x与y的和是数组总和:x + y = sum
      可以求出 x = (S + sum) / 2 = target
      也就是我们要从nums数组里选出几个数,令其和为target
      于是就转化成了求容量为target的01背包问题 =>要装满容量为target的背包,有几种方案
    • 特例判断
      如果S大于sum,不可能实现,返回0
      如果x不是整数,也就是S + sum不是偶数,不可能实现,返回0
    • dp[j]代表的意义:填满容量为j的背包,有dp[j]种方法。因为填满容量为0的背包有且只有一种方法,所以dp[0] = 1
    • 状态转移:dp[j] = dp[j] + dp[j - num],
      当前填满容量为j的包的方法数 = 之前填满容量为j的包的方法数 + 之前填满容量为j - num的包的方法数
      也就是当前数num的加入,可以把之前和为j - num的方法数加入进来。
    • 返回dp[-1],也就是dp[target]
数字孪生教程大全之 我们如何构建数字孪生?数字孪生的五个级别都是什么 文章摘要 什么是数字孪生? 我们如何构建数字孪生? 开发智能数字孪生系统的框架 什么是数字孪生? 数字孪生是一个不言自明的术语,用于识别物理系统的数字化版本。数字孪生的最早参考来自大卫·格伦特(David Gelernter )的小说作品。在他 1995 年的书中,Gelernter 博士为读者提供了未来有趣的可能性——万维网。前网络书籍谈到了计算机系统上的镜像数字世界。有些人可能会争辩说,我们的 Meta-verse 是新的数字世界——现实世界的数字孪生。但是,还有其他可能性,时间可能会讲述一个更好的 阅读详情

相关推荐

【关于四足机器人那些事】足端轨迹规划-八次多项式轨迹

系列文章目录 文章目录系列文章目录前言一、多项式曲线二、八次多项式曲线总结 前言 在四足机器人的研究中,有一个很关键的问题,就是如何减少足端在触地瞬间的冲击,避免把机器人把自己给蹬倒了?这时候就需要一个合理的足端轨迹规划。本篇将会介绍几种足端轨迹。 本文将对四足机器人的足端轨迹进行规划。将数学中的复合摆线和多项式曲线引入到足端轨迹的规划中,根据零冲击原则[2],规划出 3 条满足要求的足端轨迹,包括: 复合摆线轨迹 八次多项式轨迹 分段五次多项式轨迹 本篇先介绍 - 八次多项式轨迹 一、多项式曲

LiuZ的博客 2957

494目标和(动态规划,01背包)

1、题目描述 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 提示: 数组非空,且长度不会超过 20 。 初始的数组的和不会超过 1000 。 保证返回的最终结果能被 32 位整数存下。 2、示例 输入:nums: [1, 1, 1, 1, 1], S: 3 输出:5 解释: -1+1+1+1+1 = ...

Revendell的博客 282

开关变换器小信号建模实战:从理论到环路设计

本文深入探讨了开关变换器小信号建模的实战技巧,从理论基础到环路设计全面解析。通过Buck和Boost变换器的具体案例,详细介绍了状态空间平均法、扰动法等关键建模技术,并分享环路补偿设计和实际调试中的宝贵经验。文章特别强调了小信号建模在电源设计中的重要性,为工程师提供了从理论到实践的完整解决方案。

weixin_29290259的博客 377

LeetCode - 494. 目标和

494. 目标和 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 解题思路: 深度优先搜索,维护一个路径的和值,然后当路径遍历完毕后,比较和值是否等于目标值,如果相同,则得到一个符合目标值的路径。 ...

virgilshi的博客 286

Python 映射函数map()详解

Python 映射函数map()详解

分享我的点点滴滴,在成长路上与你同行! 2141

3.5.3以太网ETH TC8-PMA物理层测试

英文原版-OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_100BASE-T1_v3.0.pdf。PMA测试时各个测试项目所进入的测试模式不同,如TX_01对应测试模式1;TX_04对应测试模式5;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。TX_07对应测试模式5;物理层测试主要分为两部分:IOP测试(包括链接时间,信号质量,线路诊断),PMA测试。

qq_28664971的博客 7698

目标和

LeetCode 494 目标和 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例: 输入:nums: [1, 1, 1, 1, 1], S: 3 输出:5 解释: -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

jump_into_zehe的博客 254

AI Agent Harness自动化漏洞扫描

本文要介绍的AI Agent Harness自动化漏洞扫描方案,正是为了解决传统漏扫的上述痛点而生。漏洞检出率提升35%以上,逻辑漏洞检出率从不足30%提升到92%误报率从27%降到3%以下,人工复核成本降低90%支持自定义业务系统、IoT、工控等多场景资产扫描,适配成本降低80%内置反馈学习机制,扫描效果越用越好AI Agent是指具备自主感知、决策、行动能力的大模型驱动程序,它可以根据给定的目标,自主调用工具、规划步骤、完成任务。

AI 原生应用开发的博客 473

【LeetCode】494. 目标和

给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 输入: nums: [1, 1, 1, 1, 1], S: 3 输出: 5 解释: -1+1+1+1+1 = 3 +1-1+1+1+1 = ...

韩旭051的博客 657

S/4HANA Private Cloud 与 On-Premise 的 Key User Custom Fields 运输与升级避坑指南

本文探讨了SAP S/4HANA Cloud Private Edition和On-Premise系统中Key User Custom Fields的管理要点。文章指出,Custom Fields涉及元数据生成、对象一致性、传输治理等完整链路,操作不当会导致字段丢失或升级失败。关键建议包括:使用ATO Fiori App管理扩展项与传输绑定,配置正确的job user权限,避免在多系统并行开发同一字段。特别强调升级时需执行CFD_REGENERATE_IN_ONPREMISE报表,并通过标准传输机制推进变更

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 196

弥散圆以及最大弥散圆

1弥散圆的形成? 原本景物中的一点应该经过透镜本应该也是一点才对。但是因为离焦,球差的存在,最终成像会投影成一个光斑圆圈。越小越清晰,越大就互相干涉变得越模糊。 同时人们规定二零最大弥散圆,就是人眼能够感受清晰模糊的一个边界,直径大于它,感受到模糊;直径小于它,感受不到模糊。 下面分别是离焦(左),球差(右)。 2弥散圆大小怎么计算呢? ,f为焦距;<1> ,D为光圈有效孔径;<2> F=f/D; <3> 3条公式合并可得出: ...

camerall 3118

leetcode刷题(65)——494.目标和

一、题目 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 输入: nums: [1, 1, 1, 1, 1], S: 3 输出: 5 解释: -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 一共有5种方法

kezhou的博客 833

基于微博API与Scrapy-Redis的城市情绪地图数据爬取实战

本文详细介绍了如何利用Python爬虫技术从微博平台获取用户发布内容,用于构建城市情绪地图的毕业设计项目。文章涵盖了微博API的调用、Scrapy-Redis分布式爬虫架构、数据清洗与存储、反爬虫策略应对以及情绪分析预处理等关键技术,提供了完整的代码实现和实战经验。python复制下载# items.py"""清洗文本数据"""if text:# 移除HTML标签# 移除多余空白字符"""解析微博日期格式"""

2201_76125261的博客 446

LeetCode 01背包 494. 目标和

该问题要求在给定非负整数数组nums和整数target的情况下,通过为每个数字添加'+'或'-'符号构造出运算结果等于target的不同表达式数目。关键思路是将问题转化为01背包问题:设正数和为p,负数和为a,由p-a=target和p+a=sum(nums)推导出p=(target+sum)/2。然后使用动态规划求解构成和为p的方法数,其中dp[i][j]表示前i个数和为j的方法数。通过优化可将二维数组降为一维,反向遍历以避免覆盖。最终返回满足条件的表达式数目,若target+sum为奇数或负数则直接返回

软小行的博客 1153

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[leetcode]494. 目标和(01 背包dp)

个数的非负数组,每个数都要选,可以选这个数的相反数或者自己,求有多少种方案使得和为。为数组中选负数的和的绝对值,则有。个元素中找出一些数 和为。为数组中选正数的和,

weixin_45413272的博客 942

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【动态规划】【01背包 装满背包有几种方法】Leetcode 494. 目标和

【动态规划】【01背包 装满背包有几种方法】Leetcode 494. 目标和

prince0520的博客 765

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动态规划——01背包问题(力扣494:目标和)

前言 前面讲解了01背包问题的分析, 其实不难看出, 一个重要的判断该题(大概率)属于01背包问题的隐含条件是: 有N个物体(可以是任何东西, 比如今天的例题中可以是字符串和整数), 每个物体只有选与不选两种情况, 且每个物体只能被选择一次, 以此来满足某种条件 还有, 01背包的状态转移方程就只有两种情况 要么选(要满足可选前提, 即背包容量大于当前考虑的第i号元素的重量), 那就减小容积, 再从前i - 1号(子问题嘛!当然去考虑之前的)元素中去考虑 要么不选,容积不变, 直接考虑前i - 1号

qq_40472852的博客 704

LeetCode--416. 分割等和子集/494. 目标和【01背包】

哈哈,又是背包问题,一开始没写出来,写个题解加深记忆菜就多练~

Rinai的博客 724

494.目标和【01背包】

494. 目标和 题目链接:https://leetcode-cn.com/problems/target-sum/ 难度:中等 给定一个非负整数数组nums和一个目标数target。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。 返回可以使最终数组和为目标数 target的所有添加符号的方法数。 示例: 输入:nums=[1, 1, 1, 1, 1], target =3 输出:5 解释: -1+1+...

coolshyman的博客 137

【leetcode】01背包问题-494. 目标和

【leetcode】01背包问题-494. 目标和

qq_44653420的博客 258

【动态规划】力扣494.目标和:一文学会「转化思想」与「01背包应用」

dp[j]装满容量为 j 的背包,有 dp[j] 种方法边界条件时直接返回0必须是偶数left不能为负数DP数组初始化错误dp[0]必须初始化为1其他位置初始化为0遍历顺序错误必须从后往前遍历背包容量否则会重复计算不理解状态转移方程dp[j] = 不选的方法 + 选的方法选的方法数 = 装满剩余容量的方法数。

2301_80889423的博客 567

[Mdp] lc494. 目标和(01背包变种+dp+dfs)

【代码】[Mdp] lc 494. 目标和(01背包变种+dp+dfs)

Y-puyu 的博客 569

Leetcode 494. 目标和 动态规划-01背包

本题目要求通过加减运算使数组元素之和等于目标值。解题关键在于将问题转化为背包问题:将数组分成两部分,使其差值为目标值。动态规划解法中需注意边界条件(空数组和为0的方案数为1)和状态转移方程。空间优化版本采用一维数组,内循环倒序更新以避免重复计算。时间复杂度O(n*sum),空间复杂度O(sum),其中sum为数组元素和。核心是将原问题转化为寻找和为特定值的子集个数问题。

想买很多漂亮衣服但是买不起的博客 376

【十七】【动态规划】DP41 【模板】01背包、416. 分割等和子集、494. 目标和,三道题目深度解析

j-v[i]>0, 此时把第i个物品放入背包,背包还需要放j-v[i]体积的物品,此时dp[i][j]=dp[i-1][j-v[i]]+w[i]。此时dp[i][j]=dp[i-1][j-nums[i]];如果把第i个物品放入背包, 此时g[i-1]+v[i]

m0_74163972的博客 1432

动态规划01背包之494目标和

例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"。当背包里已经有一个1(nums[i]) 的话,有 dp[3]种方法 凑成 容量为4的背包。当背包里已经有一个2(nums[i]) 的话,有 dp[2]种方法 凑成 容量为4的背包。当背包里已经有一个3(nums[i]) 的话,有 dp[1]种方法 凑成 容量为4的背包。当背包里已经有一个4(nums[i]) 的话,有 dp[0]种方法 凑成 容量为4的背包。

mabaizi的博客 214

[01背包]494.目标和

494. 目标和 - 力扣(LeetCode)

m0_46322965的博客 183
上一篇: 3-无重复字符的最长子串
下一篇: 474-一和零(01背包)
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codrab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值