LeetCode:698. 划分为k个相等的子集

class Solution {

public:

bool canPartitionKSubsets(vector<int>& nums, int k) {

if (k > nums.size())

return false;

int sum = 0;

for (int v : nums) {

sum += v;

}

// 如果数字不能平分

if (sum % k != 0)

return false;

// 记录每个桶中球的数量和

vector<int> bucket(k, 0);

// 每个桶中球的数量,k是分的组数

int target = sum / k;

// 索引值为0,桶中球的数量,桶中的目标数量

return backtrack(nums, 0, bucket, target);

}

bool backtrack(vector<int>& nums, int index, vector<int>& bucket,

int target) {

if (index == nums.size()) {

// 检查是否符合要求

for (int i = 0; i < bucket.size(); i++) {

if (bucket[i] != target) {

return false;

}

}

return true;

}

//穷举nums[index]选择的桶

for(int i=0;i<bucket.size();i++){

if(bucket[i]+nums[index]>target){

continue;

}

bucket[i]+=nums[index];

if(backtrack(nums, index+1,bucket , target)){

return true;

}

bucket[i]-=nums[index];

}

return false;

}

};

会超时

相关推荐
apollowing20 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(优)
算法·启发式算法·web app
故事还在继续吗20 小时前
C++多线程与多进程编程
开发语言·c++
晓py20 小时前
highpool测试报告
c++
liuyao_xianhui20 小时前
进程概念与进程状态_Linux
linux·运维·服务器·数据结构·c++·哈希算法·宽度优先
如君愿20 小时前
考研复习 Day 26 | 习题--计算机网络第三章(数据链路层 下)、数据结构 多维数组与广义表
数据结构·计算机网络·考研·记录考研
bqq1986102620 小时前
MySQL分库分表
数据结构·mysql
迷途之人不知返21 小时前
List的模拟实现
数据结构·c++·学习·list
无敌秋21 小时前
C++ 抽象工厂模式实战指南
开发语言·c++·抽象工厂模式
Chat_zhanggong34521 小时前
主推NT98336BG作用有哪些?
嵌入式硬件·算法
CoderMeijun21 小时前
C++ 智能指针:auto_ptr
c++·内存管理·智能指针·raii·auto_ptr