加/减数组中的值得到指定的和 Target Sum
为什么80%的码农都做不了架构师?>>>
问题:
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: 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:
- 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.
解决:
① dfs。时间复杂度O(2^n)。
class Solution { //706ms
int count = 0;
public int findTargetSumWays(int[] nums, int S) {
if (nums == null || nums.length == 0) return 0;
dfs(nums,S,0,0);
return count;
}
public void dfs(int[] nums,int s,int i,int sum){
if (i == nums.length){
if (s == sum){
count ++;
}
return;
}
dfs(nums,s,i + 1,sum + nums[i]);
dfs(nums,s,i + 1,sum - nums[i]);
}
}
② 递归解决方案非常慢,因为它的运行时间是指数的。
原问题等价于:找到一个正数的子集,其余为负数,其总和为target。
设P为正数子集,N为负数子集。例如:
给定nums = [1,2,3,4,5]和target = 3,那么一个可能的解决方案是+ 1 - 2 + 3 - 4 + 5 = 3。
此时正子集是P = [1,3,5],负子集是N = [2,4]。
下面将其转换为子集总和问题:
sum(P) - sum(N) = target sum(P) + sum(N) + sum(P) - sum(N) = target + sum(P) + sum(N)2 * sum(P) = target + sum(nums)
所以原来的问题已被转换为子集和问题如下:
找出nums的一个子集P,使得sum(P)=(target + sum(nums))/ 2
class Solution { //17ms
public int findTargetSumWays(int[] nums, int S) {
int sum = 0;
for (int i = 0;i < nums.length;i ++){
sum += nums[i];
}
if (S > sum || (sum + S) % 2 == 1) return 0;//只有该式为偶数时才有符合条件的解
return subsetSum(nums,(sum + S) / 2);
}
public int subsetSum(int[] nums,int S){
int[] dp = new int[S + 1];
dp[0] = 1;//初始记录0的位置为1
for (int i = 0;i < nums.length;i ++){
for (int j = S;j >= nums[i];j --){
dp[j] += dp[j - nums[i]];
}
}
return dp[S];
}
}
转载于:https://my.oschina.net/liyurong/blog/1603737
加/减数组中的值得到指定的和 Target Sum相关推荐
- python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数返回浮点数
python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点 ...
- python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方.立方).np.power函数默认返回整数格式.np.float_power函数默认返回浮点数 目录
- 将一个数组中的字符串用指定字符分割开,分别放到另一个数组中
#include "stdafx.h" #include <stdio.h> #include <string.h> #pragma warning(dis ...
- Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
问题内容是:给定一个数组,给定一个数字.返回数组中可以相加得到指定数字的两个索引. 比如:给定nums = [2, 7, 11, 15], target = 9 那么要返回 [0, 1],因为2 + ...
- 关于等价无穷小在加减运算中的应用
关于等价无穷小在加减运算中的应用 1 初体验 为什么可以加减中运用等价无穷小? 例如: 例 1 limx→02sinx−ex+1xlim_{x \to 0} \frac{2sinx-e^x+1}{x} ...
- mysql 字段加减_MySQL中你必须了解的函数
在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重.小编刚开始学习的时候也会有这个感觉.不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个.今天小编就把常 ...
- MongoDB 学习笔记之 从数组中删除元素和指定数组位置
从数组中删除元素: 从数组中删除单个元素: db.ArrayTest.updateOne({ "name" : "Bill"},{$pop: {"ad ...
- 浮点加减运算中关于结果规格化的思考
对于两个浮点数x和y满足: 完成x与y的加减法有四个步骤: 0操作数检查.即检查是否有一个操作数为0,是的话直接得到结果,一般在计算机中不进行这一步. 比较阶码大小并完成对阶.要让两个浮点数的尾数能够 ...
- python集合的加减_python 中对list做减法操作
问题描述:假设我有这样两个list, 一个是list1,list1 = [1, 2, 3, 4, 5] 一个是list2,list2 = [1, 4, 5] 我们如何得到一个新的list,list3, ...
最新文章
- oracle 批量导出sequence,Oracle中批量導出Sequence
- windows下载anaconda3速度太慢怎么办
- explain都不懂,还好意思说会SQL调优?
- 导入之后再执行一个方法_种花生再撒点儿石灰,掌握这两个方法之后,提高产量基本没问题!...
- 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
- iOS 正确选择图片加载方式
- 【病灶分类】基于matlab粒子群算法优化SVM病灶分类【含Matlab源码 1520期】
- 黑马vue实战项目-(七)订单管理页面的开发
- PH值检测C语言程序,食品中pH的检测
- Rust:Match语句详解
- Centos6.x安装mysql5.6版本
- 骗子QQ微信在线查询系统网站源码
- Unity网络编程教学视频(本人第一次录制)
- 数据分析常见的英文缩写(一)
- matlab set函数
- 启动mysql 数据库服务器_启动及关闭MySQL服务器的正确方式
- VS Code配置C/C++环境
- 牛顿法与牛顿下山法(切线法)
- 转 大数据量下载解决方案
- 华为magic book笔记本无法重装系统的麻烦
热门文章
- Discuz!X论坛开发(九)二次开发之Discuz X2 文件目录功能详解
- 移植uboot第十步:制作uboot补丁
- iphone双卡_不吹不黑,今年的四款iPhone到底谁最值得买?
- 基于NopCommerce的开源电商系统改造总结
- shiro学习总结(一)----初识shiro
- C++ 之虚函数的实现原理
- hbase 研究 :LoadIncrementalHFiles/HFileOutputFormat2 cannot be resolved
- 第十章—DOM(0)—NODE类型
- jquery 悬浮验证框架 jQuery Validation Engine
- 如何快速重置打印队列