目标和00

news2024/12/26 12:42:43

题目链接

目标和

题目描述

注意点

  • 只能向数组中的每个整数前添加 ‘+’ 或 ‘-’
  • 返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目
  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 1000
  • 0 <= sum(nums[i]) <= 1000
  • 1000 <= target <= 1000

解答思路

  • 第一时间想到的是使用深度优先遍历寻找所有符合题意的组合,但是时间不理想
  • 可将本题看作背包问题,思路为:创建一个行为n + 1列为sum * 2 + 1的dp数组,dp[i][j]表示(0, i)之间能够得到和为(j - 1000)的组合数,列的大小为sum * 2 + 1的原因是数组中所有数字相加相减得到的最大值和最小值分别为sum和-sum,所以需要sum * 2 + 1容量用于存储和为负的情况,在dp中列为sum时视作数组和为0
  • dp[0][j]表示不选择数组中任何一个数,此时和只有一种情况,就是0,所以dp[0][sum]为1,其余dp[0][j]都为0
  • 可根据dp[i - 1][j]推出dp[i][j - nums[i - 1]]和dp[i][j + nums[i - 1]],但是要注意边界问题,也就是j - nums[i - 1]为负数和j + nums[i - 1]大于sum * 2时(实际数组中所有数字任意组合也不会超过这个边界)

代码

class Solution {
    public int findTargetSumWays(int[] nums, int target) {
        int n = nums.length;
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        if (target - sum > 0 || target + sum < 0) {
            return 0;
        }
        // dp[i][j]表示(0, i)之间能够得到和为(j - 1000)的组合数
        int[][] dp = new int[n + 1][sum * 2 + 1];
        // 不取数字时和为0
        for (int i = 0; i <= n; i++) {
            dp[i][sum] = 1;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < sum * 2 + 1; j++) {
                int comb = 0;
                if (j - nums[i - 1] >= 0) {
                    comb += dp[i - 1][j - nums[i - 1]];
                }
                if (j + nums[i - 1] < sum * 2 + 1) {
                    comb += dp[i - 1][j + nums[i - 1]];
                }
                dp[i][j] = comb;
            }
        }
        return dp[n][target + sum];
    }
}

关键点

  • 本题如何转换为背包问题
  • 背包问题的思路
  • 注意考虑边界问题

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

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

相关文章

3.5 数据更新

思维导图&#xff1a; 3.5.1 插入数据 **数据更新操作笔记** --- **概述&#xff1a;** 数据更新操作在SQL中主要包括三种&#xff1a;插入、修改和删除。以下主要集中于插入数据的操作。 --- **3.5.1 插入数据&#xff1a;** **1. 插入单一元组&#xff1a;** - 格式&am…

MySQL-DCL数据控制语言简要介绍

MySQL-DCL数据控制语言简要介绍 一、简介二、用户操作1、创建用户2、修改用户密码3、删除用户 三、权限控制1、权限说明2、显示用户权限3、授予权限4、撤销权限 一、简介 在MySQL中&#xff0c;DCL代表数据控制语言&#xff08;Data Control Language&#xff09;。DCL用于管理…

开发者职场“生存状态”大调研报告分析 - 第三版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

spark中使用flatmap报错:TypeError: ‘int‘ object is not subscriptable

1、背景描述 菜鸟笔者在运行下面代码时发生了报错&#xff1a; from pyspark import SparkContextsc SparkContext("local", "apple1012")rdd sc.parallelize([[1, 2], 3, [7, 5, 6]])rdd1 rdd.flatMap(lambda x: x) print(rdd1.collect())报错描述如…

Fastadmin/Tp5.0连接多个数据库

第一步先引入Config use think\Config; 第二步读取数据库配置 $db Config::get(database2); //读取第二个数据库配置 第三步连接数据库 $db Db::connect($config); 第四步对数据库进行操作 $data $db->name(admin)->find(); 新建的database2.php就是把原database…

冲量在线荣获2023中关村科学城科创大赛成长组TOP10优秀项目!

2023年9月15日&#xff0c;由市科委、中关村管委会&#xff0c;市发展改革委&#xff0c;市经济和信息化局联合指导的2023中关村科学城科创大赛圆满落下帷幕&#xff0c;该项赛事聚焦人工智能大模型&#xff0c;互联网3.0等前沿领域&#xff0c;吸引了国内外近300个优质项目报名…

【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库

开源项目 OpenHarmony 是每个人的 OpenHarmony 曹天恒 公司&#xff1a;中国科学院软件研究所 小组&#xff1a;知识体系工作组 1.简介 Fuse.js 是一款功能强大且轻量级的 JavaScript 模糊搜索库&#xff0c;支持 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”…

vue3 自动下载使用 iconify图标以及自定义svg图标

开发中经常使用图标&#xff0c;通过unplugin-icons 插件我们可以在项目中自动下载所需的图标&#xff0c;但实际开发中我们还需要iconfont以及项目ui切图中的图标&#xff0c;这就需要使用自定义SvgIcon组件。具体操作步骤 一、安装包 npm i -D vite-plugin-svg-icons unplu…

Live800:未来的客户服务会发生哪些改变?

随着技术的不断进步和社会的不断发展&#xff0c;客户服务行业也在不断发生着变化。未来的客户服务将会发生哪些改变呢&#xff1f;以下是五个客户服务的预测&#xff0c;以期为企业的客服部门和经营者提供一些启示。 1、AI技术将会成为客户服务行业的核心 人工智能&#xff0…

冲量在线出席2023隐私计算大会,分享在大模型时代下隐私计算的最佳应用实践

隐私计算是数据要素可信流通的关键技术&#xff0c;是当下学术和产业研究的重要方向&#xff0c;也是助力我国数字经济发展的关键举措。为促进隐私计算发展&#xff0c;为隐私计算行业人群提供交流平台&#xff0c;7月26日&#xff0c;由中国信息通信研究院、中国通信学会联合主…

产品经理进阶:如何写商业计划书?

目录 简介 确定目标 确定目标市场 竞争分析 CSDN学院 作者简介 简介 很多时候&#xff0c;我们缺乏的并不是创意。 因为任何人都可能会萌发出一个好的创意。 但是&#xff0c;将想法变成可行的业务就完全是另一码事了。 你可能会认为你自己已经做好充分准备&#xff0…

vs2010 c++ 解析 json(jsoncpp)

vs2010 c 解析 json&#xff08;jsoncpp&#xff09; 在vs2010中利于jsoncpp库解析json&#xff0c;由于vs2010的版本过于古老&#xff0c;因此我们需要下载合适的jsoncpp版本。 下载jsoncpp 网址&#xff1a;https://github.com/open-source-parsers/jsoncpp/tags 选择合适的j…

用AIGC做私活真的太赚了...

说个小道消息&#xff0c;传统涨薪跳槽旺季即将结束&#xff0c;使用AIGC技术已然迎接私活的高潮期&#xff01;各行业对【AIGC】的需求在短时间内暴增。 估计圈子里的朋友都不会闲着&#xff0c;会趁着旺季赚一笔。 所以&#xff0c;近段时间知识星球很多粉丝朋友收到了很多…

html和css基础练习

vscode快捷键 alt b 在浏览器中打开 alt shift b 在其他浏览器打开 ctrl / 注释 ctrl y 快捷键删除 参考文章 https://www.bilibili.com/video/BV1m84y1w7Tb 基础html标签 img&#xff1a;图像&#xff0c;title&#xff1a;头部文字&#xff0c;body&#xff1a;主…

【喜报】冲量在线荣获首届“创领浦东”创新创业大赛三等奖!

为挖掘和培育更多具有浦东特色的优秀创业代表&#xff0c;深耕人才创新创业沃土。2023年&#xff0c;浦东新区人力资源和社会保障局、浦东新区就业促进中心聚合三大赛事品牌&#xff0c;联手打造升级版赛事IP——首届“创领浦东”创新创业大赛。 经过初选、复选、决赛三轮评审…

让视频更加完美——Adobe Premiere Pro 2024 (Pr2024)正式发布!

如果您是一名视频制作人员&#xff0c;或者是想把自己的视频制作得更加完美的业余爱好者&#xff0c;那么您一定听说过Adobe Premiere Pro。Adobe Premiere Pro是一款功能强大、稳定可靠的视频编辑软件&#xff0c;被广泛应用于电影、电视、广告等行业。 现在&#xff0c;好消…

Bootstrap-- 媒体特性

最大、最小宽度例子&#xff1a; 横屏与竖屏例子&#xff1a; 宽度比与像素比例子&#xff1a;

C#:画许多圆

C#:画许多圆 //画许多圆 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace Test_21 {…

网络安全好学吗?要学哪些技术?

在网络上有很多关于网络安全的相关介绍&#xff0c;我们如果说真的准备了解关于网络安全的一些真实的情况&#xff0c;可以通过网上的相关知识来进行了解&#xff0c;这些知识有助于大家对网络安全的存款情况做好一个深入的了解&#xff0c;给自己制定好学习计划&#xff0c;学…

python爬虫练习,爬取iview,element组件库图标名称

简单的爬虫 先举一个爬取图片网站图片保存到本地文件夹的例子 原博客&#xff1a;http://t.csdnimg.cn/Cjv3o 这是一个图片网站 https://pic.netbian.com/ 在空白处右键&#xff0c;查看页面源代码&#xff0c;我们发现有具体内容的 我们使用下面的代码可以爬取这个页面所…