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

百度网站流量查询上海房产交易网站

百度网站流量查询,上海房产交易网站,做网站通常又什么开发完成,上海最新新闻发布问题背景 给你一个 只包含正整数 的 非空 数组 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 ] ≤ …

问题背景

给你一个 只包含正整数非空 数组 n u m s nums nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 200 1 \le nums.length \le 200 1nums.length200
  • 1 ≤ n u m s [ i ] ≤ 100 1 \le nums[i] \le 100 1nums[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(n1,sum/2),表示在 [ 0 , n − 1 ] [0, n - 1] [0,n1] 的范围上找到一个和为 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.yayakq.cn/news/454342/

相关文章:

  • wordpress全站启用ssl张戈能免费做婚礼邀请函的网站
  • 电商网站界面规范数据库网站建设方案
  • 上海网站建设报价单优秀网站seo报价
  • 潍坊做公司网站如何看访问网站的dns
  • 网站开发建设企业犀牛云做网站多少钱
  • 云系统网站建设合同娱乐网站设计与实现
  • 青岛企业建设网站公司wordpress 阿里云
  • 免费网站建设c3sales在线做网站免费黄搞
  • 网站产品的详情页怎么做公司网站宣传设计
  • 手机上能不能制作网站开发正品海外购网站有哪些
  • 手机网站字体大小自适应网站建设越来越难做
  • 大气的网站首页一流的龙岗网站建设
  • net域名网站如何查询一个网站所属的主机
  • 外贸网站价格表那个网站的详情做的好
  • 深圳工程建设网站学做淘宝网站是骗子吗
  • 聊城做手机网站建设上海建设工程安全质量监督站网站
  • 保山企业网站建设美容公司网站什么做才好
  • 专门做鞋子的网站吗杭州seo网站推广软件
  • 云南旅行社网站开发网络运营与维护
  • 织梦模板下载商城网站模板(高端大气上档次:带数据)云南集优科技网站
  • 其它区便宜营销型网站建设Wordpress 打开xml rpc
  • 花都微网站建设wordpress the
  • 门户网站开发用什么框架好如何建立asp网站
  • 九江市房管局建设官方网站河北建设银行招聘网站
  • 网站什么做的wordpress脚本
  • 伊利集团网站建设实训ps设计素材网站
  • seo关键词排名优化哪好东莞网站关键词优化公司
  • 杭州萧山区抖音seo排行榜凡科网站可以做seo优化
  • 深圳专业网站设计公司价格建设h5响应式网站有什么建议
  • 网站建设教程答允苏州久远网络力天装饰口碑怎么样