1. 题目

给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合。
如果可以,请返回 True;否则,返回 False。

示例 1:
输入:nums = [1,2,3,3,4,4,5,6], k = 4
输出:true
解释:数组可以分成 [1,2,3,4] 和 [3,4,5,6]。示例 2:
输入:nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3
输出:true
解释:数组可以分成 [1,2,3] , [2,3,4] , [3,4,5] 和 [9,10,11]。示例 3:
输入:nums = [3,3,2,2,1,1], k = 3
输出:true示例 4:
输入:nums = [1,2,3,4], k = 3
输出:false
解释:数组不能分成几个大小为 3 的子数组。提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
1 <= k <= nums.length

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

2. 解题

  • 长度不能被k整除,不行
  • map 对数字进行计数
  • 循环从头开始遍历map,接下来出现的连续k个数字的计数减去第一个数的计数
  • 计数为0的删除
class Solution {public:bool isPossibleDivide(vector<int>& nums, int k) {if(nums.size()%k != 0)return false;map<int,int> m;for(int i = 0; i < nums.size(); ++i)m[nums[i]]++;int cur, prev, i, count;while(!m.empty()){i = count = prev = 0;for(auto it = m.begin(); it != m.end() && i < k; ++it,++i){if(prev == 0){count = it->second;//第一个数的计数prev = it->first;m.erase(it);}else{if(prev+1 != it->first || it->second < count)return false;//数不连续,或者个数不够m[prev+1] -= count;if(m[prev+1] == 0)m.erase(prev+1);prev++;}}if(i != k)return false;//个数不够}return true;}
};

488 ms 49.7 MB

LeetCode 1296. 划分数组为连续数字的集合(map模拟)相关推荐

  1. leetcode1296. 划分数组为连续数字的集合(贪心算法)

    给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合. 如果可以,请返回 True:否则,返回 False. 示例 1: 输入:nums = ...

  2. LeetCode 659. 分割数组为连续子序列

    LeetCode 659. 分割数组为连续子序列 回顾 根据题意,每个元素只会涉及两种情况: 已经存在nums[i]-1结尾的序列,我们把nums[i]接到之前的某个序列后. 尝试以nums[i]为头 ...

  3. LeetCode 659. 分割数组为连续子序列(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完 ...

  4. leetcode 659. 分割数组为连续子序列(贪心算法)

    给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完成上述分割,则返回 true :否则,返回 f ...

  5. php 删除数字索引元素,PHP重置数组为连续数字索引的几种方式

    释放双眼,带上耳机,听听看~! 比如这样的一个php数组: $arr = array( 1 => 'apple', 3 => 'banana', 5 => 'orange' ); 想 ...

  6. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  7. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  8. 找出数组中最长的连续数字序列(JavaScript实现)

    原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 func ...

  9. 【LeetCode】剑指 Offer 53 - I. 在排序数组中查找数字 I

    [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 文章目录 [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 一.二分法 总结 一.二分法 ...

最新文章

  1. Python设计模式-桥接模式
  2. 使用C++实现Socket编程传输协议文件(包括大文件)
  3. springdatajpa命名规则_简单了解下spring data jpa
  4. PCANet --- 用于图像分类的深度学习基准
  5. Stack Overflow 上人气爆表的10个 Java 问题
  6. UART的FIFO功能
  7. 洛谷 【P1252】马拉松接力赛
  8. 新能源补贴退坡 广汽新能源、比亚迪不涨价 蔚来最狠!
  9. LA 3263 That Nice Euler Circuit (2D Geometry)
  10. 25.Yii2 自动加载
  11. 计算机组成原理习题答案(蒋本珊)
  12. 用python完成淘宝毫秒级抢单,助你秒杀淘宝折扣商品
  13. hdu-6638 Snowy Smile
  14. Latex常见符号对照表
  15. 安装snipe-IT遇到的php问题
  16. 志强CPU E5 E7参数,CPU内核参数对比图
  17. python可视化窗口库_Python可视化工具介绍——找到合适的库
  18. 导入mysql 1044_MySQL导入sql文件错误#1044
  19. 参会记录|2023 上海 CDC 城市领航者之夜(第一期)
  20. 重装服务器2012系统,WaveCN.com - 站长手记 - 站长手记 - WINDOWS SERVER 2012 R2 STANDARD 重装 WSUS 过程记录...

热门文章

  1. 关于android开发时,发生Error infalting classa com.baidu.mapapi.map.MapView的解决办法
  2. QT调用dll且进入DLL src code调试
  3. coreData mapView #include
  4. c语言实现线性表的算法,数据结构算法代码实现——线性表的定义(一)
  5. 有趣的反直觉的“三门问题”
  6. 小程序开发过程注意事项
  7. 消息中间件核心实体(1)
  8. Linq 实现sql中的not in和in条件查询
  9. 【代码笔记】iOS-清除图片缓存UIActionSheet
  10. 怎么在前台取的ViewBag中的值