Leetcode-494-Target-Sum

494. Target Sum[Medium](Leetcode每日一题-2021.06.07)--抄答案 Problem You are given an integer array nums and an integer target. You want to build an expression out of nums by adding one of the symbols ‘+’ and ‘-’ before each integer in nums and then concatenate all the integers. For example, if nums = [2, 1], you c 阅读详情

Leetcode-494-Target-Sum

题目如下:

You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.
Find out how many ways to assign symbols to make sum of integers equal to target S.

Example 1:

 

1

2

3

4

5

6

7

8

9

10

 

> Input: nums is [1, 1, 1, 1, 1], S is 3.

> Output: 5

> Explanation:

> -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

> There are 5 ways to assign symbols to make the sum of nums be target 3.

>

 

Note:

  1. The length of the given array is positive and will not exceed 20.
  2. The sum of elements in the given array will not exceed 1000.
  3. Your output answer is guaranteed to be fitted in a 32-bit integer.

题目大意

给定一个正数数组以及一个整数S,现在有两个符号+和-,对于数组里面的每一个数字,你可以选择+或者-作为它的新符号,找出所有选择符号的方式,使这些数字和为S。简单来说,给定一个数组,每个数可以加或者减,求出所有能使这些数字加减和为S的组合数。如{1,1,1,1,1},S为3,那么一共有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

思路

假设数组中所有数字之和为sum。根据使用的符号不同,我们可以将数组内数字分为2组P和N,如数组{1,2,3},目标为0,那么显然有如下选择方式:

+1+2-3 = 0

那么其中P={1,2},N={3}。那么sum(P)-sum(N)=S,并且sum(P)+sum(N)=sum。由此可以推出S+sum=sum(P)-sum(N)+sum(P)+sum(N)=2*sum(P)。

这样我们就把原来的问题转换成了一个新的问题,在整个数组中,能否找到一些数字的和为(S+sum)/2,这就成了一个最经典的0-1背包问题,这样的话就简单了很多。

这里有一个需要注意的地方,(S+sum)/2这个数必须为偶数,否则无法得到,其次,S也必须小于sum,否则也无法求得。

这个算法的空间复杂度不定,取决于S和sum,不过题目限制了sum < 1000,那么空间复杂度为O(sum)。至于时间复杂度也取决于sum,时间复杂度是O(sum*N2)。Java版的代码如下:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

public int findTargetSumWays(int[] nums, int S) {

int sum = 0;

for (int i = 0; i < nums.length; i ++){

sum += nums[i];

}

if (S > sum || (S + sum) % 2 != 0){

return 0;

}

sum = (S + sum) / 2;

int [] dp = new int[sum + 1];

dp[0] = 1;

for (int i = 0; i < nums.length; i ++){

for (int j = sum; j >= nums[i]; j --){

dp[j] += dp[j - nums[i]];

}

}

return dp[sum];

}

提交结果如下:

运行结果

运行结果

 

总结

最近在刷Leetcode上的tag为动态规划的题,做了那么多其实动态规划的思想一直没变,最重要的是找到状态、状态转移公式以及转移状态的条件。当然,有的时候还需要一些数学推导,把当前不熟悉的问题转化成熟悉的问题。
```
原文链接:http://KingsFish.github.io/2017/08/22/Leetcode-494-Target-Sum/

基于通义千问2.5-7B-Instruct的技术深度解析 通义千问2.5-7B-Instruct是一个基于Transformer架构的大型语言模型,具有70亿参数。它通过自注意力机制和前馈神经网络处理输入序列,能够捕捉长距离依赖关系,适用于多种NLP任务。微调是指在预训练模型的基础上,使用特定任务的数据进行进一步训练,以使模型更好地适应特定任务。微调可以显著提高模型在特定任务上的性能。通义千问2.5-7B-Instruct是一个强大的语言模型,适用于多种NLP任务。通过深入理解其架构、微调方法和核心代码,可以更好地应用于实际场景。 阅读详情

相关推荐

关于示波器测485串口波特率的使用方法总结

之前没有用过示波器,更不知道怎么来测试串口的波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有问题的,用客户的设备接收就有问题。 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送

lianxue1986的专栏 3万+

Leetcode494. 求解目标和个数

求解子集和问题

obrcnh的博客 1113

FPGA编译加速实战:6大可落地的Vivado优化策略

FPGA编译本质上是NP-hard约束满足问题求解,而非传统软件编译;Vivado作为时序驱动的硬件实现工具链,其耗时瓶颈集中在Implementation阶段的布局布线(PnR)与逻辑优化。理解这一原理,才能跳出‘加线程’‘升版本’等表面优化,转向精准时序约束、增量编译、物理锚点控制、IP配置精简等工程级干预。这些技术手段直接作用于Vivado的Tcl执行流与底层求解空间,显著压缩搜索范围、减少无效迭代——尤其适用于Zynq/UltraScale等中大型项目(LUT > 80K、多时钟域、DDR/PCIe

weixin_34226182的博客 413

leetcode - 494. 目标和

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

然后就去远行 466

Cox构建预测模型(5):如何用R语言绘制校准曲线(附全套代码)

这篇文献通过绘制两个模型的DCA曲线来评估模型的临床决策实际需求,一个是列线图模型,包括纳入列线图的全部变量,一个是TNM模型,只纳入TNM分期3个变量。A图是训练集1年、3年、5年患者的总生存期的DCA曲线;B图是训练集1年、3年、5年患者的总生存期的DCA曲线,红色线条代表列线图模型(包括构建模型的10个变量),黄色线条代表TNM模型(仅纳入TNM分期3个变量),两个模型对比,在绘制校准图之前,必须要完成数据的导入、拆分数据集的工作、预测因子的筛选,校准图的绘制是分别在训练集与验证集独立进行的。

qq_37610365的博客 1360

告别黑窗口:XShell+X11转发图形化界面的5分钟保姆级教程(附Xming配置)

本文详细介绍了如何使用XShell和X11转发技术快速实现Linux图形化界面的远程访问。通过5分钟快速配置指南,包括服务端设置、客户端工具选择及XShell+Xming的完美配置,帮助用户高效运行GUI应用程序,提升远程工作效率。特别适合需要图形化操作的开发者和运维人员。

weixin_29223603的博客 328

LeetCode494. Target Sum题解

You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol.

SYSU_LBY的博客 2054

某AI推荐系统项目管理复盘:架构师总结的6大方法论与调优策略

我是张三,某大厂资深AI架构师,主导过5个千万级用户的推荐系统项目(覆盖电商、内容、视频、音乐、外卖等场景)。我的公众号“AI架构师笔记”会分享更多AI项目管理和技术实战经验,欢迎关注。最后的话:推荐系统不是“一锤子买卖”,而是“持续优化的过程”。希望这篇文章能帮你少踩坑,多做对——毕竟,把复杂的事做成,才是架构师的核心能力。

2501_92132293的博客 362

leetcode494 目标和

给定一个非负整数数组,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 ...

斜月&三星 472

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1713

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4503

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 = 3 +1...

coordinate的博客 1万+

深度强化学习 | 基于DQN实现Flappy Bird游戏与分析

在Flappy Bird中,玩家需要通过控制小鸟安全穿过随机长度的水管来得分。本文基于深度Q网络DQN来实现Flappy Bird游戏的自主探索与学习

FRIGIDWINTER的博客 5914

Java | LeetCode | 494. Target Sum | 背包问题 | 动态规划

494. Target Sum | 背包问题 | 动态规划 问题描述 You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - a...

肖胖孩de部落格 654

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode(494):目标和 Target Sum(Java)

2019.10.24 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这题表面上是一道递归问题,好在递归层数也不是特别多,每层分支也不是很爆炸,所以直接递归也不会超时。不过这题有个更巧妙的方法,能够转换成一个01背包问题。 将数据N看成AB两个部分,A符号全取正,B符号全...

NJU_ChopinXBP的博客 418

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

每周LeetCode算法题(十八)494. Target Sum

每周LeetCode算法题(十八)题目: 494. Target Sum You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and

JacKnights的博客 346

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Leetcode】494. 目标和(Target Sum)

Leetcode - 494 Target Sum (Medium) 题目描述:给定一个正整数数组,添加正负号使得最终和为 target,求共有几种添加正负号的方式。 Input: nums is [1, 1, 1, 1, 1], S is 3. Output: 5 Explanation: -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+...

厉兵秣码 461

Leetcode494. Target Sum

Leetcode494. Target Sum题目:You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its n

mohuak的博客 222

LeetCode Top 100 Liked Questions 494. Target Sum (Java版; Medium)

welcome to my blog LeetCode Top 100 Liked Questions 494. Target Sum (Java版; Medium) 题目描述 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -...

littlehaes的博客 227

【Leetcode-Medium-494】Target Sum

【Leetcode-Medium-494】Target Sum题目You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as i

LYZ 912

Leetcode 494 Target Sum

LC 494 Target Sum Question: You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols “+” and “-” . For each integer, you should choose one from “+” and “-”...

weixin_43876597的博客 158

【Leetcode】494. Target Sum

题目地址: https://leetcode.com/problems/target-sum/ 给定一个长nnn数组AAA,再给定一个目标值ttt,可以在数组的每个数前加上正号或者负号,问能得到的和为ttt的方案有多少种。 可以用记忆化搜索。设从A[i]A[i]A[i]开始向后,当前和是sss,达到ttt的方案数有f[i][s]f[i][s]f[i][s]种,那么f[i][s]=f[i+1][s+A[i]]+f[i+1][s−A[i]]f[i][s]=f[i+1][s+A[i]]+f[i+1][s-A[i]

数学、算法爱好者的博客 361

[LeetCode]494. Target Sum

https://leetcode.com/problems/target-sum/ 给一个int数组,只能用“+”和“-”,判断计算后有多少种情况得到指定target 内层循环要用next数组保存下一状态,如果都用dp保存的话,下一状态对于当前未遍历到的状态会有污染。 public class Solution { public int findTargetSu

gqk289的专栏 3013

Leetcode算法学习日志-494 Target Sum

Leetcode 494 Target Sum 题目原文 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and

Zarlove的博客 581

LeetCode 494 Target Sum 题解

题意简述:给定一个非负数组nums和目标值S,你需要在每个数之前加上加号或减号组成表达式。求令表达式的值恰好为S的方法总共有多少种。 输入:非负数组nums,目标值S 输出:使表达式的值恰好为S的方法总数。 示例:对于数组[1,1,1,1,1],S=3,那么总共有5种方法:令其中1个1取-号,剩余4个1取加号即可。题解: 表面上看,每个位置都是考虑取加法还是取减法。我们不妨换个思路:记sum

MonoTali的博客 1028

Leetcode——494. Target Sum

题目描述 You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol. Find out how...

Johnsonjjj的博客 373
上一篇: LeetCode 39. Combination Sum 题解
下一篇: JDK 8 HashMap 源码解析
TaiSung
博客等级 码龄15年 49粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值