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

网站建设的现状和未来成都房地产管理局

网站建设的现状和未来,成都房地产管理局,最好的响应式网站,wordpress定时器题目 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ,在 1 之前添加 - &#x…

题目

给你一个非负整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例 1:

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 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
+1 + 1 + 1 + 1 - 1 = 3

示例 2:

输入:nums = [1], target = 1
输出:1

提示:

  • 1 <= nums.length <= 20
  • 0 <= nums[i] <= 1000
  • 0 <= sum(nums[i]) <= 1000
  • -1000 <= target <= 1000

解答

源代码

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for (int num : nums) {sum += num;}if (sum - target < 0 || (sum - target) % 2 == 1) {return 0;}int len = nums.length, neg = (sum - target) / 2;int[][] dp = new int[len + 1][neg + 1];dp[0][0] = 1;for (int i = 1; i < len + 1; i++) {int num = nums[i - 1];for (int j = 0; j < neg + 1; j++) {dp[i][j] = dp[i - 1][j];if (j >= num) {dp[i][j] += dp[i - 1][j - num];}}}return dp[len][neg];}
}

总结

记数组的元素和为 sum,添加 - 号的元素之和为 neg,则其余添加 + 的元素之和为 sum−neg,得到的表达式的结果为:

(sum − neg) − neg = sum − 2 * neg = target  即 neg = (sum − target) / 2

由于数组 nums 中的元素都是非负整数,neg 也必须是非负整数,所以上式成立的前提是 sum − target 是非负偶数。若不符合该条件可直接返回 0。

若上式成立,问题转化成在数组 nums 中选取若干元素,使得这些元素之和等于 neg,计算选取元素的方案数。我们可以使用动态规划的方法求解。

定义二维数组 dp,其中 dp[i][j] 表示在数组 nums 的前 i 个数中选取元素,使得这些元素之和等于 j 的方案数。假设数组 nums 的长度为 n,则最终答案为 dp[n][neg]。

当没有任何元素可以选取时,元素和只能是 0,对应的方案数是 1,因此动态规划的边界条件是:

当j = 0时,dp[0][j] = 1;当j > 0时,dp[0][j] = 0;

当 1 ≤ i ≤ n 时,对于数组 nums 中的第 i 个元素 num(i 的计数从 1 开始),遍历 0 ≤ j ≤ neg,计算 dp[i][j] 的值:

如果 j < num,则不能选 num,此时有 dp[i][j] = dp[i − 1][j];

如果 j ≥ num,则如果不选 num,方案数是 dp[i−1][j],如果选 num,方案数是 dp[i − 1][j − num],此时有 dp[i][j]=dp[i − 1][j] + dp[i − 1][j − num]。

因此状态转移如下:

当j < nums[i]时,dp[i][j] = dp[i−1][j];当j >= nums[i]时, dp[i][j] = dp[i - 1][j] + dp[i − 1][j − nums[i]]。

最终得到 dp[n][neg] 的值即为答案。

http://www.yayakq.cn/news/106791/

相关文章:

  • 西安做网站公菏泽网站制建设哪家好
  • 镇江网站建设找思创网络网站建设必须要具备哪些知识
  • 电子商务他们的代表网站网站图片怎么做才有吸引力
  • 一团网站建设长沙精品网站建设公司
  • 论坛型网站怎么做的怎么做干果网站
  • 网站怎么查是哪家网络公司做的destoon 手机网站模板
  • 网站网站是怎么做的代理小企业网站建设
  • ph域名网站商城app开发费用多少钱
  • 建站公司人员配置wordpress 4.9.8中文
  • 网站后台管理系统哪个好免费html网站开发教程
  • 网站怎么开发设计临邑建设局网站
  • 品牌网站什么意思汕头网站建设怎么收费
  • 传媒公司网站建设策划wordpress 前端用户中心
  • 海宁网站建设网站推广引流软件
  • 赣州微网站建设费用迅博威网站建设
  • 广州网站建设论坛江门17年seo优化技术软件
  • 新版爱美眉网站源码怎么删除创建的wordpress
  • 活动网站怎么建设未来 网站开发 知乎
  • 学习网站建设的书网络平台企业
  • 平顶山建设银行网站wordpress 博客实例
  • 大连中山区网站建设万网域名续费优惠
  • 做网站需要准备资料小门店做网站
  • 长沙城乡建设部网站首页制作购物网站教程
  • 网站开发软件开发114黄页公司
  • 网站推广和优化的原因网站建设实施文档
  • 石家庄网站开发设计登封网络推广
  • 台山网站建设公司兰州做网站 东方商易
  • 虚拟主机建设二个网站googleseo新手怎么做
  • 保定做网站多钱河南公司网站制作咨询
  • 家庭电脑做网站ASP个人网站的建设