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

简述网站的四种常见结构商贸公司网站建设极致发烧

简述网站的四种常见结构,商贸公司网站建设极致发烧,ui在线设计工具,wordpress纯代码注册验证目录 LeetCode494.目标和 题目描述 解法1#xff1a;回溯法 代码实现 解法2#xff1a;动态规划 代码实现 LeetCode494.目标和 题目链接 题目描述 给定一个非负整数数组#xff0c;a1, a2, ..., an, 和一个目标数#xff0c;S。现在你有两个符号 和 -。对于数组中…目录 LeetCode494.目标和 题目描述 解法1回溯法 代码实现 解法2动态规划 代码实现 LeetCode494.目标和 题目链接 题目描述 给定一个非负整数数组a1, a2, ..., an, 和一个目标数S。现在你有两个符号 和 -。对于数组中的任意一个整数你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 输入nums: [1, 1, 1, 1, 1], S: 3 输出5 解释 -11111 3 1-1111 3 11-111 3 111-11 3 1111-1 3 一共有5种方法让最终目标和为3。 提示 数组非空且长度不会超过 20 。 初始的数组的和不会超过 1000 。 保证返回的最终结果能被 32 位整数存下。 解法1回溯法 这里目的是找到和为target的数的方法数并且长度不超过20所以我开始觉得是不会超时的。这里的index表示遍历的位置因为不可以重复取值所以都是遍历的当前的下一个。然后终结条件就是index的值等于nums数组的长度的时候。 代码实现 class Solution {int times 0;int target 0;public int findTargetSumWays(int[] nums, int target) {this.target target;backTracking(0, 0, nums);return times;} ​public void backTracking(int index, int sum, int[] nums) {if (index nums.length) {if (sum target) times;return;} ​for (int i index; i nums.length; i) {sum nums[index];backTracking(i1, sum, nums);sum - 2*nums[index];backTracking(i1, sum, nums);return;}} } 解法2动态规划 如何转化为01背包问题呢。 假设加法的总和为x那么减法对应的总和就是sum - x。 所以我们要求的是 x - (sum - x) target x (target sum) / 2 此时问题就转化为装满容量为x的背包有几种方法。 这里的x就是bagSize也就是我们后面要求的背包容量。 大家看到(target sum) / 2 应该担心计算的过程中向下取整有没有影响。 这么担心就对了例如sum 是5S是2的话其实就是无解的所以 if ((target sum) % 2 1) return 0; // 此时没有方案 同时如果 S的绝对值已经大于sum那么也是没有方案的。 if (abs(target) sum) return 0; // 此时没有方案 再回归到01背包问题为什么是01背包呢 因为每个物品题目中的1只用一次 这次和之前遇到的背包问题不一样了之前都是求容量为j的背包最多能装多少。 本题则是装满有几种方法。其实这就是一个组合问题了。 确定dp数组以及下标的含义 dp[j] 表示填满j包括j这么大容积的包有dp[j]种方法 其实也可以使用二维dp数组来求解本题dpi使用 下标为[0, i]的nums[i]能够凑满j包括j这么大容量的包有dpi种方法。 确定递推公式 有哪些来源可以推出dp[j]呢 只要搞到nums[i]凑成dp[j]就有dp[j - nums[i]] 种方法。 例如dp[j]j 为5 已经有一个1nums[i] 的话有 dp[4]种方法 凑成 容量为5的背包。 已经有一个2nums[i] 的话有 dp[3]种方法 凑成 容量为5的背包。 已经有一个3nums[i] 的话有 dp[2]中方法 凑成 容量为5的背包 已经有一个4nums[i] 的话有 dp[1]中方法 凑成 容量为5的背包 已经有一个5 nums[i]的话有 dp[0]中方法 凑成 容量为5的背包 那么凑整dp[5]有多少方法呢也就是把 所有的 dp[j - nums[i]] 累加起来。 所以求组合类问题的公式都是类似这种 dp[j] dp[j - nums[i]] 这个公式在后面在讲解背包解决排列组合问题的时候还会用到 dp数组如何初始化 从递推公式可以看出在初始化的时候dp[0] 一定要初始化为1因为dp[0]是在公式中一切递推结果的起源如果dp[0]是0的话递推结果将都是0。 这里有录友可能认为从dp数组定义来说 dp[0] 应该是0也有录友认为dp[0]应该是1。 其实不要硬去解释它的含义咱就把 dp[0]的情况带入本题看看应该等于多少。 如果数组[0] target 0那么 bagSize (target sum) / 2 0。 dp[0]也应该是1 也就是说给数组里的元素 0 前面无论放加法还是减法都是 1 种方法。 所以本题我们应该初始化 dp[0] 为 1。 可能有同学想了那 如果是 数组[0,0,0,0,0] target 0 呢。 其实 此时最终的dp[0] 32也就是这五个零 子集的所有组合情况但此dp[0]非彼dp[0]dp[0]能算出32其基础是因为dp[0] 1 累加起来的。 dp[j]其他下标对应的数值也应该初始化为0从递推公式也可以看出dp[j]要保证是0的初始值才能正确的由dp[j - nums[i]]推导出来。 确定遍历顺序 nums放在外循环target在内循环且内循环倒序。 举例推导dp数组 输入nums: [1, 1, 1, 1, 1], S: 3 bagSize (S sum) / 2 (3 5) / 2 4 代码实现 class Solution {public int findTargetSumWays(int[] nums, int target) {int sum 0;for (int i 0; i nums.length; i) sum nums[i];//如果target过大 sum将无法满足if ( target 0 sum -target) return 0;if ((target sum) % 2 ! 0) return 0;int size (target sum) / 2;if(size 0) size -size;int[] dp new int[size 1];dp[0] 1;for (int i 0; i nums.length; i) {for (int j size; j nums[i]; j--) {dp[j] dp[j - nums[i]];}}return dp[size];} }
http://www.hkea.cn/news/14326250/

相关文章:

  • 阿里巴巴网站官网建筑木模板厂家
  • 网站后台程序怎么做刘家窑做网站的公司
  • app做好了网站怎么做贾汪区住房和城乡建设局网站
  • 定制旅游网站开发wordpress适合下载站的主题
  • 注册网站流程及费用海南新政策最新
  • 重庆网站建设专家游戏推广赚佣金的平台
  • 查找网站开发者网站备案信息可以更改吗
  • 网站优化 英文网页制作与设计
  • 手机网站关键词seo开发个网站需要多少钱
  • 呼市建设官方网站ps切片做网站
  • 哪个网站建站比较好公关公司都有哪些职位
  • 中国少数民族网站建设免费免费建网站
  • 新强生产建设兵团网站php网站配置说明
  • 网站服务器证书有问题重庆专业企业建设网站
  • 网站使用方法网页设计与制作教程英语
  • 猪八戒设计网站官网seo软件下载
  • 做公司网站联系公司南昌地宝网首页
  • 网站建站平台源码服务周到的上海网站建设公
  • 石家庄的电商网站建设低价网站建设推广报价
  • 内网建立网站网站建设系统开发需要多少钱
  • 个人做商机网站如何盈利网站二维码弹窗
  • 图标网站导航制作怎么做房地产做网站
  • 微网站自助建设网站js代码
  • 加强学校网站建设和宣传工作个人电脑做网站主机
  • 女装商城网站建设h5开发网站优点
  • 如何寻找seo网站建设客户泉州制作网站设计
  • 做网站可以用中文域名备案嘛单县网站建设
  • 郑州网站推广优化外包公司DW网站建设出现哪些问题
  • 西安网站建设公司咪豆网站备案背景布
  • 建立一个网站需要什么技术php后台关闭网站 功能怎么实现