LeetCode 494. 目标和(DFS+DP)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 递归
      • 2.2 DP

1. 题目

给定一个非负整数数组,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+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

一共有5种方法让最终目标和为3。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/target-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 递归

class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {int count = 0;bt(0,0,nums,S,count);return count;}void bt(int i, int cursum, vector<int>& nums, int &S, int &count) {if(i == nums.size()){if(cursum == S)++count;return;}bt(i+1,cursum+nums[i],nums,S,count);bt(i+1,cursum-nums[i],nums,S,count);}
};

在这里插入图片描述
循环BFS,超时

class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {int count = 0, n, lv = 0;queue<int> q;q.push(0);while(!q.empty()){n = q.size();while(n--){if(lv == nums.size()){if(q.front()==S)++count;q.pop();}else{q.push(q.front()+nums[lv]);q.push(q.front()-nums[lv]);q.pop();}}lv++;}return count;}
};

2.2 DP

参考别人的
假设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,从上面最后个式子,可看出 target+sum(nums) 为偶数

class Solution {
public:int findTargetSumWays(vector<int>& nums, int S) {int i, j, sum_nums = 0;for(i = 0; i < nums.size(); ++i)sum_nums += nums[i];if((long(sum_nums)+S)%2 != 0 || S > sum_nums)return 0;S = (S+sum_nums)>>1;long *dp = new long [S+1];memset(dp,0,(S+1)*sizeof(long));dp[0] = 1;for(i = 0; i < nums.size(); ++i){for(j = S; j >= 0; --j){if(dp[j] != 0 && j+nums[i] <= S)dp[j+nums[i]] += dp[j];}}return dp[S];}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Kotlin开发Android应用初体验

使用Kotlin开发Android应用初体验 昨晚&#xff0c;最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言&#xff0c;作为一名Android开发鸟&#xff0c;怎么能不及时尝尝鲜呢? Kotlin的简要介绍 在开发之前&#xff0c;很多同学一定有很多疑问&#xff0c;Kotlin到底有…

论文浅尝 - ICML2020 | 基于子图推理的归纳式关系预测

论文笔记整理&#xff1a;陈名杨&#xff0c;浙江大学在读博士生&#xff0c;主要研究方向为知识图谱表示学习。论文来源&#xff1a;ICML 2020Introduction当前在知识图谱上&#xff08;KnowledgeGraph&#xff0c;KG&#xff09;进行关系预测的很多方法都依靠在对知识图谱中的…

CVPR 二十年,影响力最大的 10 篇论文!

文 | 二玖极市平台此前&#xff0c;极市盘点了图像分割在过去二十年中影响力最大的10篇论文&#xff0c;得到了许多开发者的支持。今天&#xff0c;我们将对计算机视觉领域三大顶会之一CVPR在近二十年来中产生的优秀论文进行一个全面的盘点与总结。CVPR是计算机视觉领域三大顶会…

DataMan-美团旅行数据质量监管平台实践

背景 数据&#xff0c;已经成为互联网企业非常依赖的新型重要资产。数据质量的好坏直接关系到信息的精准度&#xff0c;也影响到企业的生存和竞争力。Michael Hammer&#xff08;《Reengineering the Corporation》一书的作者&#xff09;曾说过&#xff0c;看起来不起眼的数据…

LeetCode 133. 克隆图(图的BFS/DFS)

1. 题目 给定无向连通图中一个节点的引用&#xff0c;返回该图的深拷贝&#xff08;克隆&#xff09;。图中的每个节点都包含它的值 val&#xff08;Int&#xff09; 和其邻居的列表&#xff08;list[Node]&#xff09;。 class Node { public:int val;vector<Node*> n…

七天搞定java接口自动化测试实战,一文搞定...

前言 无论是自动化测试还是自动化部署&#xff0c;撸码肯定少不了&#xff0c;所以下面的基于java语言的接口自动化测试&#xff0c;要想在业务上实现接口自动化&#xff0c;前提是要有一定的java基础。 如果没有java基础&#xff0c;也没关系。这里小编也为大家提供了一套jav…

Android自动化测试探索

前言 通常来说&#xff0c;我们开发完成产品之后&#xff0c;都是由测试组或者是我们自己点一点&#xff0c;基本上没有问题了就开始上线。但是&#xff0c;随着时间的堆叠&#xff0c;一款产品的功能也越来越多。这时&#xff0c;我们为了保证产品的质量&#xff0c;就需要在…

我整理了100道大厂算法岗面试必考题!

最近&#xff0c;很多小伙伴给我留言去面试被面试官吊打了&#xff0c;尤其是一些去面大厂的朋友&#xff0c;甚至一面都没有过...来&#xff0c;别灰心&#xff0c;我以过往经验告诉你大厂面试的通关秘诀&#xff01;对&#xff0c;就是算法&#xff01;大厂面试必考算法&…

参会邀请 - ISWC2020 | 第十九届国际语义网会议

第十九届国际语义网会议&#xff08;ISWC2020&#xff09;将于11月1日至6日远程召开。国际语义网会议是全球最重要的且最有影响力的国际学术会议&#xff0c;主要聚焦语义网&#xff0c;知识图谱&#xff0c;本体&#xff0c;链接数据等面向互联网的人工智能技术。国际语义网会…

美团配送资金安全治理之对账体系建设

前言 随着美团配送业务的飞速发展&#xff0c;单量已经达到千万级别&#xff0c;同时每天产生的资金额已经超过几千万&#xff0c;清结算系统在保证线上服务稳定可靠的前提下&#xff0c;如何系统化的保障资金安全是非常核心且重要的课题&#xff0c;配送清结算系统经过近3年的…

gcc安装不行的解决办法,需更新apt-get

上面应该更新apt-get 更新之后&#xff0c;重新安装gcc成功

LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)

1. 题目 给定一个链表&#xff0c;每个节点包含一个额外增加的随机指针&#xff0c;该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 《剑指Offer》同题&#xff1a;面试题35. 复杂链表的复制 2. 解题 类似题目&#xff1a;LeetCode 1484. 克隆含随…

论文浅尝 - COLING2020 | 桥接文本和知识的多原型嵌入在少样本关系三元组抽取中的研究...

本文转载自公众号&#xff1a;浙大KG。 论文题目&#xff1a;Bridging Text and Knowledge with Multi-Prototype Embedding for Few-Shot Relational Triple Extraction本文作者&#xff1a;余海阳发表会议&#xff1a;COLING 2020论文链接&#xff1a;https://person.zju.…

惊呆!不用一张图片,却训出个图像识别SOTA?

文 &#xff5c; 橙橙子如果老板派给你一个任务&#xff0c;不使用一张图片&#xff0c;让你训练一个视觉预训练模型&#xff0c;你会不会觉得老板疯了。最近有一篇论文&#xff0c;不仅没用一张真实图片和标注&#xff0c;还训练出个媲美SOTA的效果&#xff0c;甚至超过了MoCo…

LeetCode 797. 所有可能的路径(DFS)

1. 题目 给一个有 n 个结点的有向无环图&#xff0c;找到所有从 0 到 n-1 的路径并输出&#xff08;不要求按顺序&#xff09; 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点&#xff08;译者注&#xff1a;有向图是有方向的&#xff0c;即规定…

每天数百亿用户行为数据,美团点评怎么实现秒级转化分析?

背景 用户行为分析是数据分析中非常重要的一项内容&#xff0c;在统计活跃用户&#xff0c;分析留存和转化率&#xff0c;改进产品体验、推动用户增长等领域有重要作用。美团点评每天收集的用户行为日志达到数百亿条&#xff0c;如何在海量数据集上实现对用户行为的快速灵活分析…

pycharm插件之SonarLint

pycharm插件之SonarLint pycharm插件之SonarLint 一、插件安装位置 1、在线安装插件 通过File—>Settings—>Plugins进行安装插件&#xff0c;然后只需要重新启动IEDA即可。 2、离线安装插件 通过 Settings > Plugins > Install Plugin from 离线安装&#x…

论文浅尝 - ICLR2020 | You Can Teach an Old Dog New Tricks!关于训练知识图谱嵌入

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生。来源&#xff1a;ICLR2020链接&#xff1a;https://openreview.net/pdf?idBkxSmlBFvrKG embedding&#xff08;KGE&#xff09;模型的目标是学习知识图谱中实体和关系的向量表示。近年来众多的KGE方法被提出&#…

撑起百万亿参数模型想象力!英伟达发布新一代SuperPOD超算,AI算力新巅峰!

周一&#xff0c;黄教主又很淡定的在自家厨房里开完了GTC发布会。众所周知&#xff0c;NLP领域的模型一个比一个大&#xff0c;自从百亿参数的Google T5出来后&#xff0c;大部分AI研究者只能望着手里的蹩脚算力兴叹。如今动辄就是千亿、万亿参数模型&#xff0c;目前比较流行的…

每日优鲜小程序基础组件介绍

每日优鲜小程序基础组件介绍1.基础组件介绍2.基础组件的结构与作用3.基础组件的接入方法初次引入初始化更新与维护基础组件接入1.基础组件介绍 小程序基础组件基于每日优鲜主商城小程序业务实践演变而来。 基础组件的名称为&#xff1a;mini_app_base_module。 基础组件的项…