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

建设网站员工招聘策划方案高性能网站建设指南在线阅读

建设网站员工招聘策划方案,高性能网站建设指南在线阅读,网站建设es158,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/560273/

相关文章:

  • 建设网站的流程可分为哪几个阶段网络设计毕设
  • 努比亚网站开发文档公司名称及网址
  • 蓝色企业网站配色.net 网站管理系统
  • 24小时网站建设1个空间做两个网站
  • 网站开发与维护专员岗位职责phpwind 企业网站
  • 网推网站网站项目运营方案
  • 中和华丰建设有限责任公司网站优秀校园网站建设汇报
  • 电商类网站开发合同书烟台市建设局网站
  • 网站开发搭建合同seo站长工具综合查询
  • 个人网站的建设与管理德阳市建设局官方网站安全月
  • 怎么样优化网站seo孝感网站开发的公司电话
  • 中山市哪家公司做网站win主机 wordpress 404
  • 外贸网站如何做推广是什么意思北京的网站开发公司
  • 珠海建网站公司网站建设中广告图片尺寸
  • 安徽建站优化天元建设集团有限公司基本情况
  • 云网站建设公司网站开发题目来源
  • 有域名有服务器怎么建站怎么做lol网站
  • 湘潭网站建设选择磐石网络淘宝网站的建设内容
  • discuz做资讯网站wordpress vip 评论
  • 怎么自己弄网站免费小明seo教程
  • 动画网站模块昌吉建设网站
  • 那个网站做视频没有水印网站建设第三方
  • 融水做的比较好的网站有哪些深圳网域公司
  • 如何制作自己公司网站uv推广平台
  • 网站建设一点通广州营销型网站建设价格
  • 设计免费素材网站有哪些建官网个人网站
  • 做图片的网站都有哪些价格低廉
  • iis网站后台登不进十大免费软件下载大全
  • 安卓手机开发者模式做了个网站 怎么做seo
  • 长沙网站建设报价智慧旅游网站建设方案ppt模板