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

Leetcode 698 Partition to K Equal Sum Subsets

题意

给一个数组,要求把数组里的元素分成k个子集,满足每个子集中数的总和是相等的。问是否能分成k个子集

题目链接

https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/

思考

想象你有k个桶,然后你有n个小球,你要做的是把这n个小球放进k个桶里,问能不能放成
最暴力的办法就是遍历所有的球,看看第一个桶能不能放,第二个桶能不能放。。。以此类推

题解

这k个子集每个子集的元素和假设为a。用dfs遍历,从第一个数字开始判断他应该放在哪个子集中。当当前子集的值小于等于需要的值的时候我们可以放,并且回溯。当最后一个数字被放入并且每个桶的元素和都能够满足为a时,那么就说明能够分成k份。
剪枝:1. 可以从大到小排序,这样可以先放大的数字,子集会更早达到元素和a
2. 当有两个子集的元素和相同时,我们只需要遍历一个子集就好
3. 当有子集的元素和已经满足为a,可以跳过

class Solution {
public:bool canPartitionKSubsets(vector<int>& nums, int k) {int sum = 0;vector<int> b(k, 0);for(int i = 0; i < nums.size(); i++) {sum += nums[i];}if(sum % k != 0) {return false;} int a = sum / k;sort(nums.begin(), nums.end(), greater<int>());return dfs(0, nums, b, a);}bool dfs(int u, vector<int>& nums, vector<int> b, int a) {if( u == nums.size()) {for(int i = 0; i < b.size(); i++) {if (b[i] != a) {return false;}}return true;}for(int i = 0; i < b.size(); i++) {if(i && b[i] == b[i-1]) {continue;}if(b[i] == a) {continue;}if(b[i] + nums[u] <= a) {b[i] += nums[u];if(dfs(u+1, nums, b, a)) {return true;}b[i] -= nums[u];}}return false;}
};

时间复杂度: O ( k n ) O(k^n) O(kn)指数级

空间复杂度: O ( k ) O(k) O(k)

http://www.lryc.cn/news/519323.html

相关文章:

  • 可靠的人形探测,未完待续(III)
  • Git文件夹提交错了,怎么撤销?
  • 小程序textarea组件键盘弹起会遮挡住输入框
  • Android车机DIY开发之学习篇(二)编译Kernel以正点原子为例
  • qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效
  • Ubuntu下载时不显示无线网图标并显示Cable unplugged
  • 微信小程序实现人脸识别登录
  • atoi函数的概念和使用案例
  • Mysql--运维篇--日志管理(连接层,SQL层,存储引擎层,文件存储层)
  • poi处理多选框进行勾选操作下载word以及多word文件压缩
  • QT 键值对集合QMap
  • NetMQ里Push-Pull模式,消息隔一收一问题小记
  • 见微知著:Tripo 开创 3D 生成新时代
  • 消息队列与中间件:Java的秘密传输带
  • Bytebase 3.1.0 - 通过 Google / GitHub SSO 功能开放给专业版
  • EdgeOne安全专项实践:上传文件漏洞攻击详解与防范措施
  • k8s部署rocketmq踩坑笔记
  • Docker 通过创建Dockerfile 部署Jar包
  • shell脚本练习
  • 【计算机网络】lab4 Ipv4(IPV4的研究)
  • Python Json格式数据处理
  • 【声音场景分类--论文阅读】
  • Web前端界面开发
  • 模式识别与机器学习
  • eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)
  • STM32 I2C硬件配置库函数
  • 特制一个自己的UI库,只用CSS、图标、emoji图 第二版
  • Hologres 介绍
  • oracle闪回表
  • 蓝桥与力扣刷题(283 移动零)