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

东莞手机网站价格表适合个人开发的小程序创意

东莞手机网站价格表,适合个人开发的小程序创意,网站备案和icp备案,微信网站响应式网站问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集#xff0c;使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ …问题背景 给你一个 只包含正整数 的 非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集使得两个子集的元素和相等。 数据约束 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1≤nums.length≤200 1 ≤ n u m s [ i ] ≤ 100 1 \le nums[i] \le 100 1≤nums[i]≤100 解题过程 要求分成两个子集且和相等其实就是找到一个总和为 s u m / 2 sum / 2 sum/2 的子集其中 s u m sum sum 表示整个集合的和。需要注意的是 s u m sum sum 必须是偶数。 此外和为零是一种可能的状态所以记忆化数组中的元素要初始化为 − 1 -1 −1。 递归入口 是 d f s ( n − 1 , s u m / 2 ) dfs(n - 1, sum / 2) dfs(n−1,sum/2)表示在 [ 0 , n − 1 ] [0, n - 1] [0,n−1] 的范围上找到一个和为 s u m / 2 sum / 2 sum/2 的子集。 递归边界 是 d f s ( − 1 , 0 ) t r u e dfs(-1, 0) true dfs(−1,0)true表示枚举完了整个集合中的所有元素最终能够使得剩余目标和减少到零。 翻译成递推时要注意数组下标不能为 − 1 -1 −1所以要进行转移将结果映射到 [ 1 , n ] [1, n] [1,n] 这个范围上。 具体实现 递归 class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int num : nums) {sum num;}if ((sum 1) 1) {return false;}int n nums.length;int[][] memo new int[n][(sum 1) 1];for (int[] row : memo) {Arrays.fill(row, -1);}return dfs(n - 1, sum 1, nums, memo);}private boolean dfs(int i, int j, int[] nums, int[][] memo) {if (i 0) {return j 0;}if (memo[i][j] ! -1) {return memo[i][j] 1;}boolean res j nums[i] dfs(i - 1, j - nums[i], nums, memo) || dfs(i - 1, j, nums, memo);memo[i][j] res ? 1 : 0;return res;} }递推 class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int num : nums) {sum num;}if ((sum 1) 1) {return false;}sum / 2;int n nums.length;boolean[][] dp new boolean[n 1][sum 1];dp[0][0] true;for (int i 0; i n; i) {int cur nums[i];for (int j 0; j sum; j) {dp[i 1][j] j cur dp[i][j - cur] || dp[i][j];}}return dp[n][sum];} }空间优化 class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int num : nums) {sum num;}if ((sum 1) 1) {return false;}sum / 2;int n nums.length;boolean[] dp new boolean[sum 1];dp[0] true;// minSum 表示前 i 个数和的上界不可能超过所有这些数的总和int minSum 0;for (int num : nums) {// 用这个值来初始化内层循环可以避免许多不必要的判断想不清楚的话直接用 sum 也可以minSum Math.min(minSum num, sum);for (int j minSum; j num; j--) {dp[j] dp[j] || dp[j - num];}if (dp[sum]) {return true;}}return false;} }
http://www.dnsts.com.cn/news/213059.html

相关文章:

  • 深圳网站建设与设计制作贵阳市网站建设公司
  • 开设公司网站厦门市同安区建设局官方网站
  • 织梦律师网站模版成都网络维护公司
  • 营销型网站的建设wordpress目录下
  • 建站成本wordpress兼容html5
  • 什么是网站栏目标题网站开发环境windows7的优点
  • 宁波网站推广方法公司怎么做网站页面
  • 网站建设站点化州网站建设公司
  • 网站品牌词wordpress文章如何调整字体
  • 运动 网站专题怎么做wordpress建企业门户
  • 南阳专业做网站公司哪家好纯js做网站
  • 低价建站在哪里买官方网站的资料做证据
  • 网站建设与开发的软件昆明微网站
  • 网站建设的开多少税率南京门户网站制作
  • 南通网站建设方案服务高端营销型企业网站建设
  • 网站介绍怎么写wordpress google翻译
  • 都哪些网站可以做gif打开有些网站显示建设中
  • 私人小工厂做网站价格吴桥做网站价格
  • 网站建设公司 温州wordpress设置伪静态
  • 网站网络拓扑图怎样做网站的优化
  • 做文案需要用到的网站专业网页设计制作价格
  • 加强人社局网站建设金华seo全网营销
  • 广告设计专业就业方向seo能干一辈子吗
  • 印象网站建设小制作灯笼
  • 网站建设.软件开发国家城乡和住房建设部网站首页
  • 上海企业建站咨询营销网站设计方案
  • 交通建设门户网站小规模公司需要交哪些税
  • 外贸自建站平台哪个好网站建设与管理培训活动总结
  • 网站建设服务器是什么意思2022新闻热点事件简短30条
  • 郑州淘宝网站建设美丽寮步网站建设