LeetCode 1681. 最小不兼容性(回溯+剪枝)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个整数数组 nums​​​ 和一个整数 k 。你需要将这个数组划分到 k 个相同大小的子集中,使得同一个子集里面没有两个相同的元素。

一个子集的 不兼容性 是该子集里面最大值和最小值的差

请你返回将数组分成 k 个子集后,各子集 不兼容性最小值 ,如果无法分成分成 k 个子集,返回 -1 。

子集的定义是数组中一些数字的集合,对数字顺序没有要求。

示例 1:
输入:nums = [1,2,1,4], k = 2
输出:4
解释:最优的分配是 [1,2][1,4] 。
不兼容性和为 (2-1) + (4-1) = 4 。
注意到 [1,1][2,4] 可以得到更小的和,但是第一个集合有 2 个相同的元素,所以不可行。示例 2:
输入:nums = [6,3,8,1,3,1,2,2], k = 4
输出:6
解释:最优的子集分配为 [1,2][2,3][6,8][1,3] 。
不兼容性和为 (2-1) + (3-2) + (8-6) + (3-1) = 6 。示例 3:
输入:nums = [5,3,3,6,3,3], k = 3
输出:-1
解释:没办法将这些数字分配到 3 个子集且满足每个子集里没有相同数字。提示:
1 <= k <= nums.length <= 16
nums.length 能被 k 整除。
1 <= nums[i] <= nums.length

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

2. 解题

写的回溯,超时了,参考评论区的刘波同学的代码,做了剪枝,通过了

class Solution {int mindiff = INT_MAX;int size;//每个集合的大小
public:int minimumIncompatibility(vector<int>& nums, int k) {if(k == nums.size())//特殊情况return 0;unordered_map<int, int> m;sort(nums.begin(), nums.end());for(auto n : nums){if(++m[n] > k)return -1;}size = nums.size()/k;vector<int> curnum(k), count(k, 0);//每个集合当前的数,集合大小dfs(nums, curnum, count, 0, 0);return mindiff;}   void dfs(vector<int>& nums, vector<int>& curnum, vector<int>& count, int i, int diff){if(diff >= mindiff)//剪枝return;if(i == nums.size()){if(diff < mindiff)mindiff = diff;return;}for(int j = 0; j < count.size(); ++j){if(curnum[j] == nums[i])//存在相同的数字了continue;if(count[j] < size)//集合还没满{int originnum = curnum[j];//集合当前的数字curnum[j] = nums[i];//nums[i] 放入集合 jcount[j]++;//集合大小 + 1int delta = count[j] >= 2 ? (nums[i]-originnum) : 0;// diff 增量dfs(nums, curnum, count, i+1, diff+delta);count[j]--;curnum[j] = originnum;if(count[j] == 0)//参考 刘波 同学//都是空的集合,这个数字放在哪个集合都是一样的,不写这句,会超时break;}}}
};// 28 ms  7.6 MB  C++

28 ms 7.6 MB C++


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

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

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

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

相关文章

使用CNN进行情感分类

文章目录1. 读取数据2. 数据集拆分3. 文本向量化4. 建立CNN模型5. 训练、测试参考 基于深度学习的自然语言处理 1. 读取数据 数据文件&#xff1a; import numpy as np import pandas as pddata pd.read_csv("yelp_labelled.txt", sep\t, names[sentence, label…

人生苦短,我用Python(Python快速教程 - 基础篇)

Life is short, you need Python 人生苦短&#xff0c;我用Python -- Bruce Eckel 5.1 Python简介 本章将介绍Python的最基本语法&#xff0c;以及一些和深度学习还有计算机视觉最相关的基本使用。 5.1.1 Python简史 Python是一门解释型的高级编程语言&#xff0c;特点是简单明…

A5营销:传统企业站优化正文内容在SEO方面的三大注意事项

关于网站的正文内容&#xff0c;相信站长们都应该比较清楚正文内容的作用以及给网站所带来的价值&#xff0c;优质的网站正文内容可以给用户带来阅读体验和帮助、可以给网站带来庞大的流量、可以让蜘蛛一次吃个饱等等。当然&#xff0c;优质的正文内容不光是内容的质量正重要&a…

LeetCode 1000. 合并石头的最低成本(区间DP)

文章目录1. 题目2. 解题1. 题目 有 N 堆石头排成一排&#xff0c;第 i 堆中有 stones[i] 块石头。 每次移动&#xff08;move&#xff09;需要将连续的 K 堆石头合并为一堆&#xff0c;而这个移动的成本为这 K 堆石头的总数。 找出把所有石头合并成一堆的最低成本。如果不可…

Android 自定义View (一)

转载请标明出处&#xff1a;http://blog.csdn.net/lmj623565791/article/details/24252901 很多的Android入门程序猿来说对于Android自定义View&#xff0c;可能都是比较恐惧的&#xff0c;但是这又是高手进阶的必经之路&#xff0c;所有准备在自定义View上面花一些功夫&#x…

LeetCode 995. K 连续位的最小翻转次数(差分思想)

文章目录1. 题目2. 解题1. 题目 在仅包含 0 和 1 的数组 A 中&#xff0c;一次 K 位翻转包括选择一个长度为 K 的&#xff08;连续&#xff09;子数组&#xff0c;同时将子数组中的每个 0 更改为 1&#xff0c;而每个 1 更改为 0。 返回所需的 K 位翻转的次数&#xff0c;以便…

如何自学人工智能?

不少同学跃跃欲试&#xff0c;想投入 AI 的怀抱&#xff0c;但苦于不知如何下手。其中&#xff0c;人工智能的核心就是机器学习&#xff08;Machine Learning&#xff09;&#xff0c;它是使计算机具有智能的根本途径&#xff0c;其应用遍及人工智能的各个领域。 我们今天就来分…

AI 人工智能学习经典书单

人工智能相关岗位中&#xff0c;涉及到的内容包含&#xff1a;算法、深度学习、机器学习、自然语言处理、数据结构、Tensorflow、Python 、数据挖掘、搜索开发、神经网络、视觉度量、图像识别、语音识别、推荐系统、系统算法、图像算法、数据分析、概率编程、计算机数学、数据仓…

牛客 牛牛爱喝酒(模拟)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9752/A 来源&#xff1a;牛客网 牛牛是一个酒鬼&#xff0c;非常爱喝酒&#xff0c; 一瓶酒m元钱&#xff0c; 两个酒瓶可以换一瓶酒&#xff0c; 四个瓶盖可以换一瓶酒&#xff0c; 现在…

零基础30分钟开启你的快速开发之旅

零基础30分钟开启你快速开发之旅 1. 前言 接触AgileEAS.NET SOA 中间件平台&#xff08;以下简称EAS.NET平台&#xff09;有4个多月时间&#xff0c;经过试用认为可以把它作为一个开发的基础平台&#xff0c;开发团队可以把开发的重点放在需求的把控和项目的交付上&#xff0c;…

牛客 牛牛的独特子序列(双指针/二分查找)

文章目录1. 题目2. 解题2.1 双指针2.2 二分查找1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9752/B 来源&#xff1a;牛客网 牛牛现在有一个长度为len只包含小写字母‘a’-z’的字符串x&#xff0c;他现在想要一个特殊的子序列&#xff0c; 这个子序列的长…

TCPIP通信

最近在开发TCPIP通信&#xff0c;封装了3个类&#xff0c;望各位大神指点指点。1 using System;2 using System.Collections.Generic;3 using System.Text;4 using System.Net.Sockets;5 using System.Threading;6 using System.Net;7 using System.Linq;8 using System.Net.Ne…

Python 20 秒画完小猪佩奇“社会人”!

每天写代码的程序员&#xff0c;你们知道今年社交平台上最火的带货女王是谁吗&#xff1f;范冰冰&#xff1f;杨幂&#xff1f;Angelababy&#xff1f;不&#xff0c;是猪猪女孩小猪佩奇。 如果你经常用抖音、快手、B 站、知乎、微博……或者类似的任何一个内容或社交平台&…

使用RNN预测文档归属作者

文章目录1. 文本处理2. 文本序列化3. 数据集拆分4. 建立RNN模型5. 训练6. 测试参考 基于深度学习的自然语言处理 1. 文本处理 数据预览 # 有两个作者的文章&#xff08;A, B&#xff09;&#xff0c;定义为0&#xff0c; 1 A 0 # hamilton B 1 # madison UNKNOWN -1# 把…

LeetCode 1674. 使数组互补的最少操作次数(差分思想)

文章目录1. 题目2. 解题1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。 每一次操作&#xff0c;你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i&#xff08;下标从 0 开始&#xff09;&#xff0c;nums[i] nums[…

Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

&#xff3b;导读&#xff3d;Kaggle 的房价预测竞赛从 2016 年 8 月开始&#xff0c;到 2017 年 2 月结束。这段时间内&#xff0c;超过 2000 多人参与比赛&#xff0c;选手采用高级回归技术&#xff0c;基于我们给出的 79 个特征&#xff0c;对房屋的售价进行了准确的预测。今…

使用GRU单元的RNN模型生成唐诗

文章目录1. 读取数据2. 字符索引3. 创建文本序列4. 创建文本编码序列5. 使用GRU单元建立RNN模型6. 文本生成参考 基于深度学习的自然语言处理 本文使用 GRU 单元建立 RNN 网络&#xff0c;使用唐诗三百首进行训练&#xff0c;使用模型生成唐诗。 GRU RNN 网络能够克服简单RNN…

Python数据结构常见的八大排序算法(详细整理)

前言 八大排序&#xff0c;三大查找是《数据结构》当中非常基础的知识点&#xff0c;在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法&#xff0c;他们之间关系如下&#xff1a; 排序算法.png 他们的性能比较&#xff1a; 下面&#xff0c;利用Python分别…

牛客 牛牛选物(01背包)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9887/A 来源&#xff1a;牛客网 牛牛有现在有n个物品&#xff0c;每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品&#xff0c;想使这若干个物品的总重量最大&…

微信小程序最常用的布局——Flex布局

最近在学习微信小程序&#xff0c;在设计首页布局的时候&#xff0c;新认识了一种布局方式display:flex 1 .container { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 background-color: #b3d4db; 6 } 编译之后的效果很明显&#xff0c;界面…