LeetCode 698. 划分为k个相等的子集(回溯)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-to-k-equal-sum-subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 416. 分割等和子集(动态规划)

  • 普通回溯,超时,59 / 149 个通过测试用例
class Solution {int target;bool ans = false;int K;
public:bool canPartitionKSubsets(vector<int>& nums, int k) {int sum = accumulate(nums.begin(), nums.end(), 0);K = k;if(sum%k) return false;target = sum/k;vector<int> partsum(k, 0);dfs(nums, partsum, 0);return ans;}void dfs(vector<int>& nums, vector<int>& partsum, int i){if(ans == true) return;if(i == nums.size()){bool flag = true;for(int k = 0; k < K; k++){if(partsum[k] != target){flag = false;break;}}if(flag)ans = true;return;}for(int j = 0; j < K; ++j){if(partsum[j]+nums[i] <= target){partsum[j] += nums[i];dfs(nums, partsum, i+1);partsum[j] -= nums[i];}}}
};
  • 优化,从大到小排序,可以尽快的让每个部分的和凑够
class Solution {int target;bool ans = false;int K;
public:bool canPartitionKSubsets(vector<int>& nums, int k) {int sum = accumulate(nums.begin(), nums.end(), 0);K = k;if(sum%k) return false;target = sum/k;sort(nums.rbegin(), nums.rend());//从大到小排序if(nums[0] > target)//最大的数超过了,不行return false;vector<int> partsum(k, 0);dfs(nums, partsum, 0);return ans;}void dfs(vector<int>& nums, vector<int>& partsum, int i){if(ans == true) return;if(i == nums.size()){bool flag = true;for(int k = 0; k < K; k++){if(partsum[k] != target){flag = false;break;}}if(flag)ans = true;return;}for(int j = 0; j < K; ++j){if(partsum[j]+nums[i] <= target){partsum[j] += nums[i];dfs(nums, partsum, i+1);partsum[j] -= nums[i];}}}
};

168 ms 9.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络服务器epoll模型的socket通讯的实现(一)

准备写一个网络游戏的服务器的通讯模块&#xff0c;参考网上看到的一些代码&#xff0c;在linux下面实现一个多线程的epoll模型的socket通讯的代码,以下是第一部分多线程的切换代码: 1 #include <stdio.h>2 #include <sys/types.h>3 #include <sys/epoll.h>…

MySQL中的表中增加删除字段

1增加两个字段&#xff1a; mysql> create table id_name(id int,name varchar(20)); Query OK, 0 rows affected (0.13 sec)mysql> alter table id_name add age int,add address varchar(11); Query OK, 0 rows affected (0.13 sec) Records: 0 Duplicates: 0 Warnin…

Ubuntu编写开机自启动脚本(转载)

From:http://blog.csdn.net/marujunyy/article/details/8466255 1、首先编写一个简单的shell脚本test.sh #! /bin/bash echo "Hello world!" filenamedate"%Y%m%d" echo $filename 2、设置脚本开机自启动 方法一&#xff1a; 编辑/etc/init.d/rc.local文件…

Ubuntu下svn 版本管理客户端工具及常用方法

Ubuntu16.04系统下安装RapidSVN版本控制器及配置diff,editor,merge和exploer工具&#xff0c;在Window下我们使用TortoiseSVN(小乌龟)&#xff0c;可以很方便地进行查看、比较、更新、提交、回滚等SVN版本控制操作。 在Linux下我们可以使用RapidSVN。RapidSVN是一款轻量级的免费…

Flink的Table API 与SQL介绍及调用

1 概述 DataSetAPI和DateStreamAPI是基于整个Flink的运行时环境做操作处理的&#xff0c;Table API和SQL是在DateStreamAPI上又包了一层。对于新版本的Blink在DateStream基础上又包了一层实现了批流统一&#xff0c;上层执行环境都是基于流处理&#xff0c;做批流统一的查询。T…

Python编程中一些异常处理的小技巧

编程中经常会需要使用到异常处理的情况&#xff0c;在阅读了一些资料后&#xff0c;整理了关于异常处理的一些小技巧记录如下。 1 如何自定义异常 1.1 定义异常类 在实际编程中&#xff0c;有时会发现Python提供的内建异常的不够用&#xff0c;我们需要在特殊业务场景下的异常…

Flink的Table API 与SQL的流处理

1 流处理与SQL的区别 Table API和SQL&#xff0c;本质上还是基于关系型表的操作方式&#xff1b;而关系型表、SQL本身&#xff0c;一般是有界的&#xff0c;更适合批处理的场景。所以在流处理的过程中&#xff0c;有一些特殊概念。 SQL流处理处理对象字段元组的有界集合字段元…

LeetCode 833. 字符串中的查找与替换(排序,replace)

文章目录1. 题目2. 解题1. 题目 某个字符串 S 需要执行一些替换操作&#xff0c;用新的字母组替换原有的字母组&#xff08;不一定大小相同&#xff09;。 每个替换操作具有 3 个参数&#xff1a;起始索引 i&#xff0c;源字 x 和目标字 y。 规则是&#xff1a;如果 x 从原始…

Json.NET

我前面的一篇博客 Metro应用Json数据处理 介绍了如何使用 DataContractJsonSerializer 类将对象的实例序列化为JSON字符串以及将JSON字符串反序列化为对象的实例的处理方式。而此种处理方式的一个很大的缺点就是要求JSON字符串格式是约定好的&#xff0c;而在很多情况下我们无法…

MySQL如何跨机器迁移数据?

经常会遇到如此需求&#xff0c;需把A主机上的MySQL数据库所有迁移到B主机上&#xff0c;或者部分数据库&#xff0c;所以接下来将介绍迁移所有数据库和迁移单个数据库时的数据迁移步骤。 1 实验环境 A主机&#xff08;源主机&#xff09;&#xff1a; IP地址&#xff1a;19…

ClickHouse的特性及读写

1 ClickHouse特性 OLAP数据库一般有2个要求&#xff1a;①容量要比关系型数据库大&#xff0c;②在线查询的速度要快。ClickHouse这两点都满足并且还支持标准的sql&#xff0c;支持比较复杂的语句&#xff0c;支持分布式。ClickHouse的几个显著特点如下&#xff1a; &#xff0…

天池 在线编程 最大得分(DP)

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744275 2. 解题 class Solution { public:/*** param matrix: the matrix* return: the maximum score you can get*/int maximumScore(vector<vector<i…

imagick用法!

https://coderwall.com/p/9hj97w sudo apt-get install imagemagick sudo apt-get install php5-imagick sudo service apache2 restart 使用imagick类&#xff1a; http://www.wodezhan.cn/?p15转载于:https://www.cnblogs.com/vincedotnet/p/3592957.html

天池 在线编程 LR String

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744276 2. 解题 class Solution { public:/*** param s: a string* param t: a string* param n: max times to swap a l and a r.* return: return if s can …

Python中如何在一行里获取多个异常

我知道这样&#xff1a; try:# 可能错的地方 except:# 如果错了执行这里也知道这样&#xff1a; try:# 可能错的地方 except IDontLikeYourFaceException:# 给爷笑一个 except YouAreTooShortException:# 踩高跷但是我想在两个不同的异常里做同样的事&#xff0c;我能想到的办法…

DolphinScheduler对比Airflow

DolphinSchedulerAirFlow稳定性单点故障去中心化的多Master和多Worke是&#xff08;单一调度程序&#xff09;HA额外要求不需要(本身就支持HA)Celery / Dask / Mesos Load Balancer DB过载处理任务队列机制&#xff0c;单个机器上可调度的任务数量可以灵活配置&#xff0c;当…

Python中字符串格式化:%和format

Python2.6推出了[str.format()]方法&#xff0c;和原有的%格式化方式有小小的区别。那个方法更好&#xff1f; 下面的方法有同样的输出&#xff0c;它们的区别是什么&#xff1f; #!/usr/bin/pythonsub1 "python string!"sub2 "an arg"a "i am a …

jsAutomation 服务器不能创建对象(转)

var ExApp new ActiveXObject("Excel.Application") “automation服务器不能创建对象”的问题的解决方案大全本人工作中的应用系统都是jsp的&#xff0c;大量javascript程序&#xff0c;一旦出“automation服务器不能创建对象”问题&#xff0c;大量报表及查询无法保…

天池 在线编程 音乐组合

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/164423301311799378/184808348725744274 2. 解题 对60求余后&#xff0c;0, 30的为 Cn2C_n^2Cn2​&#xff0c;其余的相加等于60的&#xff0c;种类相乘 class Solution { public:/*** param …

java之NIO(Channel,Buffer,Selector)

java之NIO 1 什么是NIO Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO的三大核心部分&#xff1a;通道(Channel)&#xff0c;缓冲区(Buffer), 选择器(Selector)&#xff0c;数据总是从…