【经典题目分析】数组分割问题

文章目录

  • 698. 划分为k个相等的子集
  • 416. 分割等和数组

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

在这里插入图片描述

把一个数组,拆分成K个大小一样的子数组。方法可以是状态枚举,或者dfs

class Solution {
public:bool canPartitionKSubsets(vector<int>& nums, int k) {// 从大向小,提高效率sort(nums.begin(), nums.end(),greater<int>());int total = accumulate(nums.begin(), nums.end(), 0);if (total%k != 0) {return false;} int avg = total/k;if (nums.front()>avg) return false;int n = nums.size();vector<int> sum(k,0);// 使用dfs的方法,每次去枚举每一个队列里能不能有空间放开这个数字function<bool(int)> dfs = [&](int x){if(x == n) return true;int cur = nums[x];for (int i = 0;i<k;i++){if(i!= 0 && sum[i] == sum[i-1]) continue; // 这个执行了一个剪枝,如果前一个状态和当前一样,就不需要考虑了。sum[i] += cur;if(sum[i]<=avg && dfs(x+1)){return true;}sum[i] -= cur;}return false;};return dfs(0);}
};

状态压缩的方法

class Solution {
public:bool canPartitionKSubsets(vector<int>& nums, int k) {sort(nums.begin(), nums.end());int total = accumulate(nums.begin(), nums.end(), 0);if (total%k != 0) {return false;} int avg = total/k;if (nums.back()>avg) return false;int n = nums.size();int size = 1<<n;vector<int> dp(size, -1);dp[0] = 0;for(int i = 0;i<size;i++){          if(dp[i] == -1) continue;for (int j = 0;j<n;j++){if(dp[i] + nums[j] > avg) break;if(((1<<j) & i) == 0){int next = i+ (1<<j);if(dp[next] != -1) continue;         dp[next] = (dp[i]+nums[j])% avg ;}if(dp[size-1] == 0) return true; }}return false;}
};

416. 分割等和数组

在这里插入图片描述

这个问题其实可以被看做是上一个问题的子问题,但是也可以被简化为其中一个数组能够正好凑到target。因此问题可以被化简为背包问题求解。

class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;int maxnum = 0;for (auto x: nums){sum += x;maxnum = max(maxnum, x);}if(sum%2!=0) return false;int target = sum/2;if (maxnum>target) return false;int n = nums.size();if (n < 2) {return false;}vector<bool> dp(target+1, false);dp[0] = true;for (int i = 0;i<n;i++){int cur = nums[i];for (int j = target;j>=cur;j--){dp[j] = dp[j] || dp[j-cur];}}return dp[target];}
};

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

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

相关文章

Gateway网关

网关的作用 对用户请求作身份认证、权限校验将用户请求路由到微服务&#xff0c;并实现负载均衡对用户请求作限流 引入依赖 <!--nacos服务注册发现依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter…

pdf如何导出为图片?分享三个方法PDF转图片!

将PDF文件转换为图片是在许多场景下都非常有用的操作&#xff0c;不仅能够保留原始文档的内容&#xff0c;还方便在各种平台上共享和展示。在本文中&#xff0c;我们将介绍三种简便的方法&#xff0c;帮助您将PDF文件快速转换为图片格式。 方法一&#xff1a;使用记灵在线工具…

Linux环境搭建(三)— 搭建数据库服务器

linux &#xff08;ubuntu&#xff09;安装mysql 和环境配置 一、安装MySql二、配置环境三、外网访问四、重置密码五、卸载 写在前面&#xff1a; 本文默认你的Linux系统已经安装vim&#xff0c;yum等&#xff0c;如你使用的是一个全新的操作系统&#xff0c;移步上一篇开始配置…

webpack相关面试题

webpack面试题 1.webpack和vite区别2.如何优化webpack打包速度&#xff1f;3.说说webpack中常见的Plugin&#xff1f;解决了什么问题4.说说如何借助webpack来优化前端性能&#xff1f;如何优化JS代码压缩CSS代码压缩Html文件代码压缩文件大小压缩图片压缩Tree ShakingusedExpor…

rsync 远程同步

rsync 远程同步 一、概念 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09; 是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录&#xff0c;支持增量备份&#xff0c;并保持链接和权限&#xff0c;且采用优化的同步算法&#xff0c;传输…

爬虫入门指南(7):使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解【爬虫小白必看】

文章目录 介绍技术要点SeleniumBeautifulSoupOpenpyxl 实现步骤&#xff1a;导入所需库设置网页URL和驱动路径创建 ChromeDriver 服务配置 ChromeDriver创建 Excel 文件爬取数据关闭浏览器保存 Excel 文件 完整代码导出的excel 效果图未完待续.... 介绍 在本篇博客中&#xff…

使用docker搭建mysql集群

一、技术架构 1、架构图 2、解说 mysql_1、mysql_2、mysql_3是一组主从模式,同理mysql_4、mysql_5、mysql_6也是一组主从模式从上面的图可以看出mysql_1和mysql_4是主节点,可以进行增删改查操作,但是子几点只能查询操作如果mysql_1节点出现问题了&#xff0c;有mysql_4节点组…

Android Binder通信原理(七):java 下的C-S

源码基于&#xff1a;Android R 0. 前言 在之前的几篇博文中&#xff0c;对Android binder 的通信原理进行的深入的剖析&#xff0c;这些博文包括&#xff1a;binder 简介、servicemanager启动、service注册、service获取、Java 端的service 注册和获取。 在前一文中&#xf…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Squid代理服务器

Squid代理服务器 一、Squid相关知识 1.功能 Squid 主要提供缓存加速、应用层过滤控制的功能。 2.工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到…

4.Nginx缓存设置和CDN

文章目录 Nginx缓存设置设置缓存取消不需要内容的缓存查看nginx缓存数据 CDN概念工作原理 Nginx缓存设置 设置缓存 ##在yum配置文件中添加nginx在线源vim /etc/yum.repos.d/nginx.repo[nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/7/$base…

从零开始 Spring Boot 59:Hibernate 日志

从零开始 Spring Boot 59&#xff1a;Hibernate 日志 图源&#xff1a;简书 (jianshu.com) Hibernate 支持多种日志模块&#xff0c;本文介绍如何在 Spring Boot 中使用 Log4j2记录 Hibernate 日志。 实际上本文是我在写上篇文章时遇到的各种坑和最终解决的记录。 首先需要添加…