LeetCode 494. 目标和

对于这题,我们可以用回溯解决,枚举所有的 + - 组合,求出答案等于target的组合个数。也可以利用动态规划来解决,且更高效。

对于 nums ,我们可以依据每个元素前面的符号来将其分为两个集合P Q,其中P为前面加正号的数,Q为前面加负号的数。

故sum(P)−sum(Q)=targetsum(P) - sum(Q) = targetsum(P)−sum(Q)=target。

又因为sum(P)+sum(Q)=sum(nums)sum(P) + sum(Q) = sum(nums)sum(P)+sum(Q)=sum(nums)

则2×sum(P)=target+sum(nums)2\times sum(P) = target + sum(nums)2×sum(P)=target+sum(nums)

其结构与 416. 分割等和子集 一模一样。

c++ 复制代码
class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int target) {
        int sum = target + accumulate(nums.begin(), nums.end(), 0);
        if(sum%2 || sum<0) return 0;
        sum /= 2;
        vector<int> dp(sum + 1, 0);
        dp[0] = 1;
        for(auto x : nums){
            for(int i = sum;i >= x;i--){
                dp[i] = dp[i] + dp[i-x];
            }
        }
        return dp[sum];
    }
};
相关推荐
8Qi87 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
888CC++9 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
(●—●)橘子……10 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科12 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
KaMeidebaby12 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
无限码力13 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
BlockWay14 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft
风筝在晴天搁浅14 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
Smoothcloud润云14 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text