当前位置: 首页 > news >正文

494.目标和

在这里插入图片描述

1. 回溯算法

这题和之前做的那些排列、组合的回溯稍微有些不同,你不需要每次选数据时都是for遍历去选择,很明显这是顺序选择的
比如 数组[0,1],target=1;
在这里插入图片描述
递归数组,每个元素都 + 或者 - ,然后取最后结果为0的即可

class Solution {public int findTargetSumWays(int[] nums, int target) {find(0,nums,target);return count;}private void find(int begin,int[] nums,int target){// 如果减完了,结束if(begin == nums.length){if(target == 0){count++;}return;}target-=nums[begin];find(begin+1,nums,target);target+=nums[begin];target+=nums[begin];find(begin+1,nums,target);target-=nums[begin];   }private int count=0;
}

2. 动态规划

这其实可以抽象为0/1背包问题。
数组中的元素,要么是前面+,要么是前面-,问计算结果为target的方案有多少种。
计算结果为0,即我们把前面为+的元素放在一个集合A中,前面为-的元素放在一个集合B中,二者之差为target即可。
我们如果知道了集合A,那么集合B自然就是数组中剩余元素组成。

可以列个简单的数学公式,假设A集合元素的和为left,B元素和为right,数组总和为sum

left + right = sum;
left - right = target;

二者一相加可以得到 left=(sum+target)/2;
由于都是正整数,left如果不是正整数,说明无解,即没有这种方案。

思路成功转换为,背包容量为left,在数组中找出和刚好为left的方案,并记录方案的最大数。

  1. 确定dp[i][j]

即dp[i][j] :在数组中下标为0~i的元素中任选,和刚好为j的方案数量

  1. 确定递推公式
    如果第i个元素不选,那方案数量和dp[i-1][j]的一样
    dp[i][j] = dp[i-1][j]
    如果选了第i个元素,那方案就不仅仅从i-1个元素选出和为j的,从i-1个元素选出和为j-nums[i]的也可以,两种方案数相加。
    dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]]

  2. 如何初始化
    dp[0][0]=1 我可以都不选,那方案数就是1
    初始化第一行 dp[0][nums[0]]+=1;
    题目中提示给出nums[i]范围是可能为0,所以如果nums[0]=0,那就是dp[0][0]中都不选的方案中,再添加一种,选择元素0,那就是两个方案了!!!
    重点细节,卡了我一个上午!!!

  3. 确定遍历顺序
    先数组元素,再背包容量

  4. 模拟推导

class Solution {public int findTargetSumWays(int[] nums, int target) {if(nums.length == 1){return target == nums[0]?1:target == 0-nums[0]?1:0;}// 把集合分成前面放+的正集合和前面放-的负集合.正集合的和为left,负集合的和为right// left+right=sum left-right=target => left = (target+sum)/2// 即转换为问题---把背包容量为left的背包装满有多少种方案// 同时,如果left不为整数,说明不行,返回0// dp[i][j] 在下标0为~i的元素中,填满背包容量为j,有多少种方案// dp[i][j] = dp[i-1][j] 如果不装i// dp[i][j] = Math.max(dp[i-1][j-nums[i]],dp[i-1][j]) 如果装iint sum=0;for(int i:nums){sum += i;}if((target+sum)%2 != 0 ){return 0;}if(target > sum || target < -sum){return 0;}int num = (target+sum)/2;num = num < 0?-num:num;int[][] dp = new int[nums.length][num+1];// 当容量为0的时候,都不选就是一种方案for(int i=0;i<nums.length;i++){dp[i][0]=1;}// 遍历第一行,dp[0][nums[0]]+=1 因为可能第一行中nums[0]=0,此时dp[0][0]其实已经初始化为1了,但是dp[0][0]其实有两个方案的,一个是都不选,一个是选了0,这个细节决定了我们后续的遍历从第二行开始是否成功!!!if(nums[0]<num+1){dp[0][nums[0]]+=1;}for(int i=1;i<nums.length;i++){for(int j=0;j<num+1;j++){dp[i][j] = dp[i-1][j];if(j>=nums[i]){dp[i][j] = dp[i-1][j-nums[i]] + dp[i-1][j];   } }}return dp[nums.length-1][num];}
}

优化成一维的

class Solution {public int findTargetSumWays(int[] nums, int target) {if(nums.length == 1){return target == nums[0]?1:target == 0-nums[0]?1:0;}// 把集合分成前面放+的正集合和前面放-的负集合.正集合的和为left,负集合的和为right// left+right=sum left-right=target => left = (target+sum)/2// 即转换为问题---把背包容量为left的背包装满有多少种方案// 同时,如果left不为整数,说明不行,返回0// dp[i][j] 在下标0为~i的元素中,填满背包容量为j,有多少种方案// dp[i][j] = dp[i-1][j] 如果不装i// dp[i][j] = Math.max(dp[i-1][j-nums[i]],dp[i-1][j]) 如果装iint sum=0;for(int i:nums){sum += i;}if((target+sum)%2 != 0 ){return 0;}if(target > sum || target < -sum){return 0;}int num = (target+sum)/2;num = num < 0?-num:num;int[]dp = new int[num+1];// 当容量为0的时候,都不选就是一种方案dp[0]=1;// 遍历第一行if(nums[0]<num+1){dp[nums[0]]+=1;}for(int i=1;i<nums.length;i++){for(int j=num;j>=nums[i];j--){dp[j] += dp[j-nums[i]]; }}return dp[num];}
}

这道题很经典,建议过段时间重复刷

相关文章:

494.目标和

1. 回溯算法 这题和之前做的那些排列、组合的回溯稍微有些不同&#xff0c;你不需要每次选数据时都是for遍历去选择&#xff0c;很明显这是顺序选择的 比如 数组[0,1]&#xff0c;target1&#xff1b; 递归数组&#xff0c;每个元素都 或者 - &#xff0c;然后取最后结果为0…...

滑台模组的应用有哪些?

在自动化生产中&#xff0c;我们常常会看到滑台模组的身影&#xff0c;那么&#xff0c;滑台模组究竟在自动化生产设备中起着怎样的作用呢&#xff1f; 简单点说&#xff0c;滑台模组由滑块、滚珠丝杆、导轨、主体等其它传动零件组成的自动化晋级单元&#xff0c;经过各单元的组…...

CS224W课程学习笔记(四):node2vec算法原理与说明

引言 什么是图嵌入&#xff1f; 我想从上节的deepwalk中已经有一个十分完整的轮廓了&#xff0c;这里引出deepwalk论文中的一张很形象的图&#xff08;当然&#xff0c;上节的一些实战演练&#xff0c;也将这种嵌入关系进行了模拟与可视化&#xff0c;前文为&#xff1a;&…...

扩展lucas定理

前置知识&#xff1a; lucas定理中国剩余定理 介绍 当正整数n,mn,mn,m很大&#xff0c;且质数ppp较小的时候&#xff0c;要求CnmC_n^mCnm​对ppp取模后的值&#xff0c;可以用lucas定理。 但如果ppp不是质数&#xff0c;那该怎么办呢&#xff1f;如果mmm较小&#xff0c;则…...

医疗影像工具LEADTOOLS 入门教程: 从 PDF 中提取附件 - 控制台 C#

LEADTOOLS 是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#…...

【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL

一 LVGL简介最近emwin用的比较烦躁&#xff0c;同时被LVGL酷炫的界面吸引到了&#xff0c;所以准备换用LVGL试试水。LVGL(轻量级和通用图形库)是一个免费和开源的图形库&#xff0c;它提供了创建嵌入式GUI所需的一切&#xff0c;具有易于使用的图形元素&#xff0c;美丽的视觉效…...

Transformer学习笔记

Transformer学习笔记1. 参考2. 模型图3.encoder部分3.1 Positional Encoding3.2 Muti-Head Attention3.3 ADD--残差连接3.4 Norm标准化3.5 单个Transformer Encoder流程图4.decoder部分4.1 mask Muti-Head Attention4.2 Muti-Head Attention5 多个Transformer Encoder和多个Tra…...

vue-cli引入wangEditor、Element,封装可上传附件的富文本编辑器组件(附源代码直接应用,菜单可调整)

关于Element安装引入&#xff0c;请参考我的另一篇文章&#xff1a;vue-cli引入Element Plus&#xff08;element-ui&#xff09;&#xff0c;修改主题变量&#xff0c;定义全局样式_shawxlee的博客-CSDN博客_chalk variables 1、安装wangeditor npm i wangeditor --savewangE…...

移动办公时代,数智化平台如何赋能企业管理升级?

在传统的办公模式下&#xff0c;企业组织办公不仅时效低&#xff0c;周期长、成本高&#xff0c;且各办公系统相互独立。随着社会经济的发展&#xff0c;人们的工作生活变得多样化&#xff0c;对于办公的需求也越来越多&#xff0c;存在明显弊端的传统办公模式已不能满足企业对…...

2023“拼夕夕”为什么可以凭借简单的拼团做这么大?

2023“拼夕夕”为什么可以凭借简单的拼团做这么大&#xff1f; 2023-02-24 梦龙 大家好&#xff0c;我是你们熟悉而又陌生的好朋友梦龙&#xff0c;一个创业期的年轻人 大家都知道&#xff0c;拼夕夕背后的商业模式是拼团&#xff0c;但是大家知道为什么简单的拼团可以让拼夕…...

sqlmap工具

sqlmap Sqlmap是一个开源的渗透测试工具&#xff0c;可以用来自动化的检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库 Sqlmap采用了以下5种独特的SQ…...

高/低压供配电系统设计——安科瑞变电站电力监控系统的应用

摘 要&#xff1a;在电力系统的运行过程中&#xff0c;变电站作为整个电力系统的核心&#xff0c;在保证电力系统可靠的运行方面起着至关重要的作用&#xff0c;基于此需对变电站监控系统的特点进行分析&#xff0c;结合变电站监控系统的功能需求&#xff0c;对变电站电力监控系…...

Tapdata 和 Databend 数仓数据同步实战

作者&#xff1a;韩山杰https://github.com/hantmacDatabend Cloud 研发工程师基础架构在云计算时代也发生着翻天地覆的变化&#xff0c;对于业务的支持变成了如何能利用好云资源实现降本增效&#xff0c;同时更好的支撑业务也成为新时代技术人员的挑战。 本篇文章通过&#xf…...

单核CPU, 1G内存,也能做JVM调优吗?

最近&#xff0c;笔者的技术群里有人问了一个有趣的技术话题&#xff1a;单核CPU, 1G内存的超低配机器&#xff0c;怎么做JVM调优&#xff1f;这实际上是两个问题。单核CPU的超低配机器&#xff0c;怎么充分利用CPU&#xff1f;单核CPU, 1G内存的超低配机器&#xff0c;怎么做J…...

《计算机应用研究》投稿经历和时间节点

记录四川计算机研究院《计算机应用研究》期刊投稿经历和时间节点。 日期状态周期2022.11.09上传稿件当天显示编辑部已接收稿件&#xff0c;开始初审2022.11.09 – 2022.11.15初审6天2022.11.15 – 2022.12.21外审36天2022.12.21收到退修意见&#xff08;邮件形式&#xff09;编…...

mars3d获取视窗的范围

期望效果 :1.我现在想获取到当前视窗的地图范围&#xff0c;请问有什么⽅法可以拿到吗 2.⽐如当前视窗地图范围的边界点&#xff0c;每个边界点的经纬度 回复&#xff1a;1.mars3d的API⽂档中有相关的⽅法 2.具体使⽤可以参考⽂档地址&#xff1a;http://mars3d.cn/api/Map.htm…...

《高性能MySQL》读书笔记(上)

目录 MySQL的架构 MySQL中的锁 MySQL中的事务 事务特性 隔离级别 事务日志 多版本并发控制MVCC 影响MySQL性能的物理因素 InnoDB缓冲池 MySQL常用的数据类型以及优化 字符串类型 日期和时间类型 数据标识符 MySQL的架构 默认情况下&#xff0c;每个客户端连接都…...

05-代理模式

代理模式 代理模式使用代理对象来代替真实对象的访问&#xff0c;在不修改原有对象的前提下&#xff0c;提供额外的操作&#xff0c;扩展目标对象的功能。代理模式分为静态代理和动态代理。 静态代理 手动为目标对象中的方法进行增强&#xff0c;通过实现相同接口重写方法进…...

RocketMQ源码分析之消费队列、Index索引文件存储结构与存储机制-上篇

RocketMQ 存储基础回顾&#xff1a; 源码分析RocketMQ之CommitLog消息存储机制 本文主要从源码的角度分析 Rocketmq 消费队列 ConsumeQueue 物理文件的构建与存储结构&#xff0c;同时分析 RocketMQ 索引文件IndexFile 文件的存储原理、存储格式以及检索方式。RocketMQ 的存储…...

基于Java的浏览器的设计与实现毕业设计

技术&#xff1a;Java等摘要&#xff1a;当今世界是一个以计算机网络为核心的信息时代&#xff0c;互联网为人们快速获取、发布和传递信息提供了便捷&#xff0c;而浏览器作为互联网上查找信息的重要工具&#xff0c;给人们提供了巨大而又宝贵的信息财富&#xff0c;受到了大家…...

基于RTK-GPS与ResNet50的自主草坪清扫机器人系统设计与实践

1. 项目概述与核心挑战在公园维护的日常工作中&#xff0c;草坪垃圾清理是一项既耗费人力又效率低下的重复性劳动。传统的清扫方式要么依赖人工&#xff0c;要么使用大型、笨重且可能损伤草皮的设备。我们团队的目标&#xff0c;是设计并实现一个能够自主、高效且温和地完成这项…...

Unity自定义碰撞与力场系统实战指南

1. 这不是“加个Rigidbody”就能解决的问题很多人在Unity里做物理交互&#xff0c;第一反应就是拖一个Rigidbody组件上去&#xff0c;再配个Collider&#xff0c;以为这就叫“用了物理引擎”。结果一跑起来&#xff1a;角色穿模、物体悬浮、力反馈生硬、粒子被撞飞得毫无逻辑……...

AI时代的个人隐私与网络安全自保——从账号密码到设备行为的完整体系

一个很多人没做但很简单的事&#xff1a;去搜索一下自己的真实姓名、手机号、家庭住址&#xff0c;看看哪些信息已经公开在网上。知道自己的暴露面&#xff0c;才知道要重点保护什么。 haveibeenpwned是免费、靠谱、隐私友好的数据泄露查询工具。 安全防护不追求完美&#xff0…...

Windows 11系统级优化:ExplorerPatcher核心技术深度解析与专业修复方案

Windows 11系统级优化&#xff1a;ExplorerPatcher核心技术深度解析与专业修复方案 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11…...

软考软件设计师·考前6天·最后冲刺全攻略

&#x1f4dd; 软考软件设计师考前6天最后冲刺全攻略&#x1f4c5; 2026年5月17日 | 距考试 6 天 | 2026上半年软考时间&#xff1a;5月23-26日一、&#x1f525; 2025年最新真题考情深度分析 根据2025年上下半年真题回忆版&#xff0c;以下是最新出题趋势与分值分布&#xff1…...

原来训大模型,就像开一家小餐馆!

你是不是一直觉得&#xff0c;训练大语言模型是 OpenAI、百度这种大厂才能干的事&#xff1f;要几万张显卡&#xff0c;要花几个亿&#xff0c;普通人想都不敢想&#xff1f; 错了&#xff01;我用自己开发机上的 8 张 H20 显卡&#xff0c;花了点时间&#xff0c;从零开始训了…...

对比一圈后 AI智能降重工具深度测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

不止于看见,更在于改变——双碳传媒的全球工业服务生态

在数字化与智能化重塑世界的今天&#xff0c;传统的工业传播边界正在被打破。双碳传媒&#xff08;秦皇岛&#xff09;有限公司&#xff0c;正以AI技术为核心驱动&#xff0c;重新定义全球工业服务的生态格局。我们深知&#xff0c;服务国家战略与顶级企业&#xff0c;需要的是…...

QLoRA:4-bit 量化微调的完整链路

本文基于昇腾CANN和昇腾NPU&#xff0c;围绕 cann-recipes-train 仓库的相关技术展开。 QLoRA 不是简单的 LoRA 量化。它在 LoRA 的冻结权重上做了 NF4 量化&#xff0c;同时保留了 LoRA 适配器的 FP16 精度。CANN 上部署 QLoRA 模型时&#xff0c;NF4 的反量化要在 NPU 上做&…...

将Taotoken作为统一网关整合到企业现有微服务架构中的设计考量

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 将Taotoken作为统一网关整合到企业现有微服务架构中的设计考量 当企业内部多个业务线或团队开始独立探索和应用大模型能力时&#…...