文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个 非递减 的正整数数组 nums 和整数 K,判断该数组是否可以被分成一个几个 长度至少 为 K 的 不相交的递增子序列

示例 1:
输入:nums = [1,2,2,3,3,4,4], K = 3
输出:true
解释:
该数组可以分成两个子序列 [1,2,3,4] 和 [2,3,4],
每个子序列的长度都至少是 3。示例 2:
输入:nums = [5,6,6,7,8], K = 3
输出:false
解释:
没有办法根据条件来划分数组。提示:
1 <= nums.length <= 10^5
1 <= K <= nums.length
1 <= nums[i] <= 10^5

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

2. 解题

  • 题目要求每个子序列严格递增,所以每个子序列里没有相同的值
  • 找出数组里出现次数最多的,c 次,这个数分给 c 个子序列
  • 每个子序列长度至少为 K,那么必须满足 c∗K<=nc*K <= nc∗K<=n 数组长度
class Solution {public:bool canDivideIntoSubsequences(vector<int>& nums, int K) {unordered_map<int,int> count;int i, maxcount = 0, n = nums.size();for(i = 0; i < n; ++i){count[nums[i]]++;maxcount = max(maxcount, count[nums[i]]);}return maxcount*K <= n;}
};

584 ms 103.7 MB

  • 数组有序,不需要哈希map计数,见官方答案
class Solution {public:bool canDivideIntoSubsequences(vector<int>& nums, int K) {int pre = nums[0], cnt = 0;for (int n : nums) {if (n == pre)++cnt;else {pre = n;cnt = 1;}if (cnt * K > nums.size())return false;}return true;}
};

284 ms 69.2 MB


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

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

LeetCode 1121. 将数组分成几个递增序列相关推荐

  1. LeetCode 2035. 将数组分成两个数组并最小化数组和的差

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个 ...

  2. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3734 访问. 给定一个未经排序的整数数组,找到最长且连续的的递增 ...

  3. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...

  4. LeetCode 1712. 将数组分成三个子数组的方案数(前缀和 + 二分查找)

    文章目录 1. 题目 2. 解题 221 / 3117,前7.1% 574 / 9692,前 5.9% 周赛前2题如下: LeetCode 5641. 卡车上的最大单元数(排序,模拟) LeetCod ...

  5. LeetCode 1013. 将数组分成和相等的三个部分

    1. 题目 给定一个整数数组 A,只有我们可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果我们可以找出索引 i+1 < j 且满足 (A[0] + A[ ...

  6. leetcode —— 1013. 将数组分成和相等的三个部分

    给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + - + A ...

  7. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  8. python【力扣LeetCode算法题库】1013-将数组分成和相等的三个部分(贪心)

    将数组分成和相等的三个部分 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] ...

  9. Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和

    文章目录 本题分析 题目链接 本题分析 题目重述: 给定一个非负的数组,要求将其分成3个非空的三段,要求每一段的数字之和依次递增(可以相等),求总共有几种分法. 题目解答: 双指针算法 思路:枚举第二 ...

最新文章

  1. 如何调用AngularJS指令中定义的方法?
  2. JavaScript获取iframe中form表单中元素的值
  3. python while循环语句-Python
  4. Android Studio同步失败设置代理,Android Studio如何设置代理?
  5. dede中list标签php,dedecms标签中什么表示列表标签
  6. android 开发环境 配置和说明
  7. php本地怎么接受小程序图片,怎么把本地图片当作小程序背景
  8. mysql英文介绍_每日科技英文48: MySQL C API简介
  9. TP类库解析和使用系列[Input类]
  10. js中for循环调用回调函数,一直循环最后一个
  11. android java程序中调用shell命令
  12. (dfs)[USACO3.4]“破锣摇滚”乐队 Raucous Rockers
  13. 另辟蹊径,挑战网络战争
  14. 单片机复位电路是怎么工作的?
  15. 最近ChatGPT封号太严重了,这里是解封攻略步骤(建议收藏)
  16. JQury实现ajax异步请求
  17. 具有路线规划功能的外卖平台(Qt,C++,C/S架构,MySql)
  18. 平面直角坐标系中的旋转公式_定比分点公式及定理
  19. 垃圾填埋场渗滤液厌氧处理过程中沼气的综合利用
  20. 想精通单片机开发,这些必备基础知识不可不掌握

热门文章

  1. 使用2to3.py 转换 python2.x 代码 到python3
  2. 互联网金融行业申请评分卡(A卡)简介
  3. 445端口 mysql_关于如何关闭window端口445的详细介绍
  4. 武汉理工大学java,武汉理工大学 web技术基础
  5. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
  6. Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程
  7. Android中的APK,TASK,PROCESS,USERID之间的关系
  8. .Net笔试题 有答案
  9. boost_1.47在VS2010下的安装
  10. MySQL InnoDB的缓冲池之预读失效和缓存池污染