当前位置: 首页 > news >正文

【贪心】【哈希】个人练习-Leetcode-1296. Divide Array in Sets of K Consecutive Numbers

题目链接:https://leetcode.cn/problems/divide-array-in-sets-of-k-consecutive-numbers/description/

题目大意:给出一个数组nums[]和一个数k,求nums[]能否被分成若干个k个元素的连续的子列。

思路:比较简单,贪心就行,找到当前剩下的元素中最小的v,然后(如果合法)它必然属于某个子列,那么就找v+1, ..., v+k-1,这些元素的剩余量都减1即可。如果出现空缺,那么就返回false

很显然用哈希表比较合适。不过我开始做时,因为要从小到大遍历剩余元素,就用了map<int, int>,直接从map的头开始遍历。虽然通过了,但速度有点慢。看了题解,发现用的是unordered_map<int, int>,区别就是先把nums[]排序了一遍,然后对nums[]进行遍历。这也是OK的,因为排序后,nums[]中,每个最小的元素都需要被归入一个子列中。这样就节约了时间。

完整代码

class Solution {
public:bool isPossibleDivide(vector<int>& nums, int k) {int n = nums.size();if (n % k)return false;sort(nums.begin(), nums.end());unordered_map<int, int> cnt;for (auto& num : nums) {cnt[num]++;}for (auto& num : nums) {if (!cnt.count(num))continue;cnt[num]--;if (cnt[num] == 0)cnt.erase(num);for (int i = 1; i < k; i++) {if (cnt.count(num+i) != 0) {cnt[num+i]--;if (cnt[num+i] == 0)cnt.erase(num+i);}elsereturn false;}}return true;}
};
http://www.lryc.cn/news/480787.html

相关文章:

  • 【数据库实验一】数据库及数据库中表的建立实验
  • Web服务nginx基本实验
  • Ubuntu实现双击图标运行自己的应用软件
  • js id字符串转数组
  • 《手写Spring渐进式源码实践》实践笔记(第十八章 JDBC功能整合)
  • 边缘计算在智能交通系统中的应用
  • HTML5+css3(浮动,浮动的相关属性,float,解决浮动的塌陷问题,clear,overflow,给父亲盒子加高度,伪元素)
  • 【C++ 滑动窗口】2134. 最少交换次数来组合所有的 1 II
  • 使用 PyTorch 实现并测试 AlexNet 模型,并使用 TensorRT 进行推理加速
  • Python 数据可视化详解教程
  • springboot集成opencv开源计算机视觉库
  • CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳
  • 2024年11月8日上海帆软用户大会
  • 信息泄露漏洞一文速通
  • Android 启动时应用的安装解析过程《二》
  • 智谱AI:ChatGLM强大的生成式语言模型
  • git tag
  • Golang--反射
  • ABAP:SET CURSOR FIELD设置鼠标焦点
  • 【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)
  • LabVIEW气体检测系统
  • LeetCode78. 子集(2024秋季每日一题 58)
  • 推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer
  • Golang--网络编程
  • 区块链技术在数字版权管理中的应用
  • WPS单元格重复值提示设置
  • Scala 的包及其导入
  • 架构师备考-概念背诵(软件工程)
  • DIP switch是什么?
  • 【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】