LeetCode 1121. 将数组分成几个递增序列
文章目录
- 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. 将数组分成几个递增序列相关推荐
- LeetCode 2035. 将数组分成两个数组并最小化数组和的差
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给你一个 ...
- C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3734 访问. 给定一个未经排序的整数数组,找到最长且连续的的递增 ...
- LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...
- LeetCode 1712. 将数组分成三个子数组的方案数(前缀和 + 二分查找)
文章目录 1. 题目 2. 解题 221 / 3117,前7.1% 574 / 9692,前 5.9% 周赛前2题如下: LeetCode 5641. 卡车上的最大单元数(排序,模拟) LeetCod ...
- LeetCode 1013. 将数组分成和相等的三个部分
1. 题目 给定一个整数数组 A,只有我们可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果我们可以找出索引 i+1 < j 且满足 (A[0] + A[ ...
- leetcode —— 1013. 将数组分成和相等的三个部分
给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + - + A ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- python【力扣LeetCode算法题库】1013-将数组分成和相等的三个部分(贪心)
将数组分成和相等的三个部分 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] ...
- Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和
文章目录 本题分析 题目链接 本题分析 题目重述: 给定一个非负的数组,要求将其分成3个非空的三段,要求每一段的数字之和依次递增(可以相等),求总共有几种分法. 题目解答: 双指针算法 思路:枚举第二 ...
最新文章
- 如何调用AngularJS指令中定义的方法?
- JavaScript获取iframe中form表单中元素的值
- python while循环语句-Python
- Android Studio同步失败设置代理,Android Studio如何设置代理?
- dede中list标签php,dedecms标签中什么表示列表标签
- android 开发环境 配置和说明
- php本地怎么接受小程序图片,怎么把本地图片当作小程序背景
- mysql英文介绍_每日科技英文48: MySQL C API简介
- TP类库解析和使用系列[Input类]
- js中for循环调用回调函数,一直循环最后一个
- android java程序中调用shell命令
- (dfs)[USACO3.4]“破锣摇滚”乐队 Raucous Rockers
- 另辟蹊径,挑战网络战争
- 单片机复位电路是怎么工作的?
- 最近ChatGPT封号太严重了,这里是解封攻略步骤(建议收藏)
- JQury实现ajax异步请求
- 具有路线规划功能的外卖平台(Qt,C++,C/S架构,MySql)
- 平面直角坐标系中的旋转公式_定比分点公式及定理
- 垃圾填埋场渗滤液厌氧处理过程中沼气的综合利用
- 想精通单片机开发,这些必备基础知识不可不掌握
热门文章
- 使用2to3.py 转换 python2.x 代码 到python3
- 互联网金融行业申请评分卡(A卡)简介
- 445端口 mysql_关于如何关闭window端口445的详细介绍
- 武汉理工大学java,武汉理工大学 web技术基础
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
- Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程
- Android中的APK,TASK,PROCESS,USERID之间的关系
- .Net笔试题 有答案
- boost_1.47在VS2010下的安装
- MySQL InnoDB的缓冲池之预读失效和缓存池污染