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

房天下官方网站营销技巧和营销方法培训

房天下官方网站,营销技巧和营销方法培训,做网站需要的服务器,中山 做网站给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。 示例 1: 输入: nums [4, 3, 2, 3, 5, 2, 1], k 4 输出: True 说明: 有可能将其分成 4 个子集&#…

给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

示例 1:

输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
输出: True
说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。
示例 2:

输入: nums = [1,2,3,4], k = 3
输出: false

提示:

1 <= k <= len(nums) <= 16
0 < nums[i] < 10000
每个元素的频率在 [1,4] 范围内

题解(回溯法)

题解参考自LFool
把集合中数字想象成球,把子集想象成桶
遍历数组计算总和sum,如果sum%k!=0直接返回false
否则令target=sum/k,计算每个桶内球的值之和是否等于sum/k

法一、球选择桶

在这里插入图片描述

dfs(nums,target,idx,bucket)

  1. 递归终止:idx越界,已经处理完所有球(idx==nums.length)
  2. 本层操作:bucket[i]+=nums[idx];
    剪枝:nums[idx]+bucket[i]>target
  3. 向下递归:如果有一个路径为true则返回true
    if(dfs(nums,idx+1,bucket,k,target)) return true;
  4. 回溯:
    bucket[i]-=nums[idx]
class Solution {public boolean canPartitionKSubsets(int[] nums, int k) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];if (sum % k != 0) return false;int target = sum / k;int[] bucket = new int[k];return dfs(nums,0,bucket,k,target);}private boolean dfs(int[] nums, int idx, int[] bucket, int k, int target){// 递归终止:idx越过数组边界,此时已经处理完所有球if (idx == nums.length) {// 判断现在桶中的球是否符合要求 -> 路径是否满足要求for (int i = 0; i < k; i++) {if (bucket[i] != target) return false;}return true;}//遍历所有桶寻找当前球可以放置的位置for(int i=0;i<k;i++){if(nums[idx]+bucket[i]>target) continue;//本层操作bucket[i]+=nums[idx];//向下递归:如果有一个路径为true则返回trueif(dfs(nums,idx+1,bucket,k,target)) return true;//回溯bucket[i]-=nums[idx];}return false;}
}

法二 桶选择球

class Solution {public boolean canPartitionKSubsets(int[] nums, int k) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];if (sum % k != 0) return false;int target = sum / k;int[] bucket = new int[k];return dfs(nums,0,bucket,k,target);}private boolean dfs(int[] nums, int idx, int[] bucket, int k, int target){// 递归终止:idx越过数组边界,此时已经处理完所有球if (idx == nums.length) {// 判断现在桶中的球是否符合要求 -> 路径是否满足要求for (int i = 0; i < k; i++) {if (bucket[i] != target) return false;}return true;}//遍历所有桶寻找当前球可以放置的位置for(int i=0;i<k;i++){if(nums[idx]+bucket[i]>target) continue;//本层操作bucket[i]+=nums[idx];//向下递归:如果有一个路径为true则返回trueif(dfs(nums,idx+1,bucket,k,target)) return true;//回溯bucket[i]-=nums[idx];}return false;}
}
收起
http://www.dtcms.com/wzjs/5719.html

相关文章:

  • 静态网站设计心得如何设计企业网站
  • 男女直接做网站百度搜索大数据
  • 红河科技公司 网站建设怎么样做免费的百度seo
  • 西坝河网站建设企业网站建设目标
  • 怎么做找券网站免费域名 网站
  • 深圳做网站价比高的公司性橙子建站官网
  • 做网站构建百度问答库
  • 网站调用字体库网站运营seo实训总结
  • 贸易公司如何做网站免费建站系统
  • 重庆网站优化公司微信营销软件排行榜
  • 石家庄建设工程招标办网站百度在线入口
  • 做测算的网站竞价托管 微竞价
  • 网站商务通客服端怎样做搜索引擎推广
  • 网站模板免费下载网站东莞网络营销渠道
  • 工信部网站备案电话十大搜索引擎神器
  • 工作室网站源码php上海网站推广公司
  • 金融类网站设计推广目标怎么写
  • 机械东莞网站建设0769百度竞价关键词价格查询工具
  • 淮阳住房和城乡建设局网站软件推广接单平台
  • 小红书的网络营销方法网站排名优化方案
  • 维护网站需要多少钱软文推广渠道
  • 免费创建网站教程佛山网站优化
  • 做电影网站用什么服务器比较好郑州百度推广哪家好
  • 怎样用百度做网站优化广告推广语
  • ppt软件手机版免费下载seo怎么做优化排名
  • 响水网站制作公司电商线上推广渠道
  • 沈阳做网站哪个好公司品牌宣传
  • 网站建设与规划前景seo建站平台哪家好
  • 大连做外贸建站的专业公司百度咨询电话 人工客服
  • 哪些客户需要做网站品牌推广策略包括哪些内容