LeetCode 1655. 分配重复整数(回溯)
文章目录
- 1. 题目
- 2. 解题
- 2.1 回溯
1. 题目
给你一个长度为 n 的整数数组 nums ,这个数组中至多有 50 个不同的值。
同时你有 m 个顾客的订单 quantity ,其中,整数 quantity[i] 是第 i 位顾客订单的数目。请你判断是否能将 nums 中的整数分配给这些顾客,且满足:
- 第 i 位顾客 恰好 有 quantity[i] 个整数。
- 第 i 位顾客拿到的整数都是 相同的 。
- 每位顾客都满足上述两个要求。
如果你可以分配 nums 中的整数满足上面的要求,那么请返回 true ,否则返回 false 。
示例 1:
输入:nums = [1,2,3,4], quantity = [2]
输出:false
解释:第 0 位顾客没办法得到两个相同的整数。示例 2:
输入:nums = [1,2,3,3], quantity = [2]
输出:true
解释:第 0 位顾客得到 [3,3] 。整数 [1,2] 都没有被使用。示例 3:
输入:nums = [1,1,2,2], quantity = [2,2]
输出:true
解释:第 0 位顾客得到 [1,1] ,第 1 位顾客得到 [2,2] 。示例 4:
输入:nums = [1,1,2,3], quantity = [2,2]
输出:false
解释:尽管第 0 位顾客可以得到 [1,1] ,第 1 位顾客没法得到 2 个一样的整数。示例 5:
输入:nums = [1,1,1,1,1], quantity = [2,3]
输出:true
解释:第 0 位顾客得到 [1,1] ,第 1 位顾客得到 [1,1,1] 。提示:
n == nums.length
1 <= n <= 10^5
1 <= nums[i] <= 1000
m == quantity.length
1 <= m <= 10
1 <= quantity[i] <= 10^5
nums 中至多有 50 个不同的数字。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distribute-repeating-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
2.1 回溯
class Solution {bool ans = false;
public:bool canDistribute(vector<int>& nums, vector<int>& quantity) {unordered_map<int,int> m;for(auto n : nums)m[n]++;vector<int> val(m.size(), 0);int i = 0;for(auto it = m.begin(); it != m.end(); ++it)val[i++] = it->second;sort(val.rbegin(), val.rend());sort(quantity.rbegin(), quantity.rend());dfs(val, quantity, 0);return ans;}void dfs(vector<int>& val, vector<int>& quantity, int i){if(ans)return;if(i == quantity.size()){ans = true;return;}for(int j = 0; j < val.size(); ++j){if(val[j]-quantity[i] >= 0){val[j] -= quantity[i];dfs(val, quantity, i+1);val[j] += quantity[i];}}}
};
820 ms 73.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1655. 分配重复整数(回溯)相关推荐
- 【LeetCode】1655. Distribute Repeating Integers 分配重复整数
一题多解. 首先理解问题,可以抽象为: 有若干物品,大小分别为quantity[i]. 假如某个数字重复x次,可理解为有一个容量为x的背包 要把物品放进背包里,问能不能放完 DFS 暴力解法,直接遍历 ...
- DFS 如何避免重复母题 Leetcode 077组合(人为规定选取顺序:本题为只能从前往后选,好马不吃回头草)(类似题:Leetcode047全排列(可能含重复元素)-回溯法加剪枝)
类似题 Leetcode047全排列(可能含重复元素)-----------回溯法加剪枝 https://blog.csdn.net/qq_52934831/article/details/11957 ...
- LeetCode 491. 递增子序列(回溯+判重剪枝)
1. 题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7] ...
- LeetCode 47. 全排列 II(回溯+搜索剪枝)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...
- C++找出数组中的第一个非重复整数的算法(附完整源码)
C++找出数组中的第一个非重复整数的算法 C++找出数组中的第一个非重复整数的算法完整源码(定义,实现,main函数测试) C++找出数组中的第一个非重复整数的算法完整源码(定义,实现,main函数测 ...
- [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)
[DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
- c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言
leetcode 13 罗马数字转整数 原题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 ...
- Python LeetCode(13.罗马数字转整数)
Python LeetCode(13.罗马数字转整数) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...
最新文章
- 数据库路由中间件MyCat - 使用篇(2)
- uva673 Parentheses Balance
- string转换为bigdecimal_java如何将String转换为Int
- Java集合框架:TreeMap
- 单例模式(饿汉式和懒汉式)
- if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;
- 郁金香商业辅助教程 2016 笔记 6~10
- python用一行代码编写一个回声程序_Python源码分析2 - 一个简单的Python程序的执行...
- 基于Cocos2d-x开发guardCarrot--4 《保卫萝卜2》主页面动画
- linux虚拟usbgs0,USB模拟串口
- java 使用websocket_Java使用WebSocket
- Linux下的经典软件-史上最全
- 惠普传真服务器位置,惠普传真机的使用方法
- mac关于 E45: ‘readonly‘ option is set (add ! to override)
- 7-1 愿天下有情人都是失散多年的兄妹 (25 分)
- python缩进块是什么,Python块缩进
- HTML5印章绘制电子签章图片,中文英文椭圆章、中文英文椭圆印章
- 黑马程序员---Java 容器集合
- python变量赋值方式_python中变量的命令规制及变量的赋值方式
- c语言弹出窗口的函数名,用C语言做弹出窗口