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

建设银行快审额度查询网站/东莞seo建站排名

建设银行快审额度查询网站,东莞seo建站排名,wordpress首页加载慢,开发公司延迟缴纳维修基金申请书题目 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 和 -。对于数组中的任意一个整数,你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例&#xff1…

题目

给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。

返回可以使最终数组和为目标数 S 的所有添加符号的方法数。

示例:

输入: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

提示:

数组非空,且长度不会超过 20 。
初始的数组的和不会超过 1000 。
保证返回的最终结果能被 32 位整数存下。

动态规化

这题可以转换为第416分割子集的问题。
将数组nums分为两部分正数P,负数N:

  P - N = SP + N + P - N = S + P + NP = (S + P + N) / 2P = (S + sum)/2 

因此只需要找到一个子集令其都为正号其和刚好为(S + sum)/2就说明存在解。这题需注意nums数组中元素为非负整数,而416题为正整数。所以需要注意j可以为0

class Solution {public int findTargetSumWays(int[] nums, int S) {// P - N = S// P + N + P - N = S + P + N// P = (S + P + N) / 2// P = (S + sum)/2 int sum = Arrays.stream(nums).sum();if (sum < S || (sum + S) % 2 == 1) {return 0;}int target = (S + sum) / 2;int n = nums.length;// 考虑第[0, i)个数能否刚好填满容量为j 的背包的方法数int[][] dp = new int[n + 1][target + 1];// i= 0 j!=0, dp[0][j] = 0, j = 0,i==0, dp[i][0] = 1dp[0][0] = 1;for (int i = 1; i < n + 1; i++) {for (int j = 0; j < target + 1; j++) {if (nums[i - 1] <= j) {dp[i][j] = dp[i-1][j] + dp[i-1][j - nums[i-1]];} else {dp[i][j] = dp[i-1][j];}}}return dp[n][target];}
}

空间优化

class Solution {public int findTargetSumWays(int[] nums, int S) {// P - N = S// P + N + P - N = S + P + N// P = (S + P + N) / 2// P = (S + sum)/2 int sum = Arrays.stream(nums).sum();if (sum < S || (sum + S) % 2 == 1) {return 0;}int target = (S + sum) / 2;int n = nums.length;// 考虑第[0, i)个数取数能否刚好填满容量为j 的背包的方法数int[] dp = new int[target + 1];dp[0] = 1;if (nums[0] <= target)dp[nums[0]] += 1;// 注意是+=,nums[0]可以为0for (int i = 1; i < n; i++) {for (int j = target; j >= 0; j--) {if (nums[i] <= j) {dp[j] = dp[j] + dp[j - nums[i]];}}}return dp[target];}
}

dfs

数组长度不会超过20,20个数字的序列,组合方式撑死了2202^{20}220
种,算下来才1024 × 10241024×1024, 对于每一个数S都能加上这个数或者减去这个数,当到达叶子节点时判断S是否为0如果为0则返回1,最后将所有情况累加返回。

class Solution {public int findTargetSumWays(int[] nums, int S) {return dfs(nums, 0, S);}private int dfs(int[] nums, int start, int sum) {if (start == nums.length) {return sum == 0 ? 1 : 0;}return dfs(nums, start + 1, sum - nums[start]) +dfs(nums, start + 1, sum + nums[start]);}
}
http://www.jmfq.cn/news/5052331.html

相关文章:

  • 安徽网站建设哪家好/win优化大师怎么样
  • 注册企业在哪个网站/关键词汇总
  • 阿里云网站备案时间/快速推广
  • 青海餐饮网站建设公司/app推广方式
  • 延吉有学建设网站的地方吗/微信公众号的推广
  • 西安制作网站公司哪家好/seo关键词优化要多少钱
  • wps可以做网站吗/合肥做网站的公司有哪些
  • 高端电子商务网站建设/网络广告策划的内容
  • 大型公司网站制作/seo 网站优化推广排名教程
  • 搭建wordpress/快速刷排名seo软件
  • 手机链接ppt在哪个网站做/网站外链的优化方法
  • 石家庄网站建设/seo培训优化课程
  • 商城购物网站有哪些模块/东莞整站优化
  • 厦门企业官方网站建设/竞价推广遇到恶意点击怎么办
  • 精灵网站建设/免费的推广网站
  • 网站建设龙岗/seo在线短视频发布页
  • 网站建设歺金手指排名15/厦门seo网站排名优化
  • 营销型网站有什么特点/网络营销与网站推广的
  • 张掖做网站公司/做seo如何赚钱
  • 网站还没上线 可以对网站备案吗/国内营销推广渠道
  • 做阿胶上什么网站比较好/宁波网站优化公司推荐
  • 澳大利亚网站设计/百度seo关键词排名s
  • 投资20万做网站好吗/中国培训网
  • dede网站301怎么做/2022年五月份热点事件
  • 学校营销型网站/网络营销竞价推广
  • ps怎么做网站首页界面/大数据营销名词解释
  • 做网站如何处理并发问题/qq群引流推广平台免费
  • 装饰公司看的设计网站/seo关键词优化举例
  • 临沂企业建站系统模板/seo系统是什么意思
  • 论坛网站制作/手机怎么做网站免费的