0494. 目标和
题目地址(494. 目标和)
https://leetcode-cn.com/problems/target-sum/
题目描述
前置知识
动态规划
公司
阿里
腾讯
百度
字节
思路
题目是给定一个数组,让你在数字前面添加 +
或者-
,使其和等于 target.
暴力法的时间复杂度是指数级别的,因此我们不予考虑。我们需要换种思路.
我们将最终的结果分成两组,一组是我们添加了+
的,一组是我们添加了-
的。
如上图,问题转化为如何求其中一组,我们不妨求前面标+
的一组
如果求出一组,另一组实际就已知了,即总集和这一组的差集。
通过进一步分析,我们得到了这样的关系:
因此问题转化为,求解sumCount(nums, target)
,即 nums 数组中能够组成 target 的总数一共有多少种,这是一道我们之前做过的题目,使用动态规划可以解决。
关键点解析
对元素进行分组,分组的依据是符号, 是
+
或者-
通过数学公式推导可以简化我们的求解过程,这需要一点
数学知识和数学意识
代码
复杂度分析
时间复杂度:$O(N * target)$
空间复杂度:$O(target)$
扩展
如果这道题目并没有限定所有的元素以及 target 都是正数怎么办?
最后更新于