494. Target Sum
来源:互联网 发布:林州豫广网络客服电话 编辑:程序博客网 时间:2024/06/15 23:17
题目:
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:
Input: nums is [1, 1, 1, 1, 1], S is 3. Output: 5Explanation: -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 = 3There are 5 ways to assign symbols to make the sum of nums be target 3.
Note:
- The length of the given array is positive and will not exceed 20.
- The sum of elements in the given array will not exceed 1000.
- Your output answer is guaranteed to be fitted in a 32-bit integer.
这题很容易就能用暴力(深度搜索)的解法。但不是最好的解法,可以用动态规划来解,DP 加入“+”和“-”之后原数组的元素可以看成被分成了两个子集合,一个正的子集合P,另一个负的子集合N。使得sum(P)+sum(N) = S,且P+N = nums。不断地简化,最终只要使得sum(P) = (S + sum(nums)) / 2,即可。
具体代码如下:
class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { int sum = accumulate(nums.begin(), nums.end(), 0); if (sum < S || ((S + sum) & 0x1) == 1) { return 0; } int target = (S + sum) >> 1; vector<int> dp(target + 1, 0); dp[0] = 1; for (auto num : nums) { for (int i = target; i >= num; --i) { dp[i] += dp[i - num]; } } return dp[target]; }};end!
阅读全文
0 0
- LeetCode 494. Target Sum
- [LeetCode]494. Target Sum
- 494. Target Sum
- [leetcode]494. Target Sum
- 494. Target Sum
- Leetcode 494. Target Sum
- 494. Target Sum -Medium
- 494. Target Sum
- Leetcode-494. Target Sum
- 494. Target Sum
- Leetcode 494. Target Sum
- 494. Target Sum
- leetcode-494. Target Sum
- 494. Target Sum
- 494. Target Sum
- 494. Target Sum
- 494. Target Sum
- 494. Target Sum
- 【BZOJ】4774 修路 斯坦纳树
- 【LeetCode】517. Super Washing Machines
- Rectangles
- Android Volley的使用(一)基本网络请求
- maven 打包 web 项目时,war 包里的 class 不是最新的内容。
- 494. Target Sum
- zturn开发板网口驱动的注册过程
- 解决C++ 无法从void 转换为LRESULT的方法详解
- Leetcode141. Linked List Cycle
- (搬运).net起步 (对 Login 控件添加图文验证码)
- 内存优化
- SDUT 3921 Special Judge Ⅲ
- 汇编语言: 编写一个程序,从键盘输入一个 0~65535 之间的 10 进制无符号数,然后以 16 进制 和四进制数形式显示出所输入的数。
- tomcat的性能调优