leetcode 659. 分割数组为连续子序列(贪心算法)
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。
如果可以完成上述分割,则返回 true ;否则,返回 false 。
示例 1:
输入: [1,2,3,3,4,5]
输出: True
解释:
你可以分割出这样两个连续子序列 :
1, 2, 3
3, 4, 5
代码
class Solution {public boolean isPossible(int[] nums) {Map<Integer,Integer> endmap=new HashMap<>();Map<Integer,Integer> countMap=new HashMap<>();for(int c:nums) countMap.put(c,countMap.getOrDefault(c,0)+1);for(int c:nums){if(countMap.get(c)==0) continue;if(endmap.getOrDefault(c-1,0)>0)//前面有序列可以连上{countMap.put(c,countMap.get(c)-1);//数字c减一endmap.put(c-1,endmap.get(c-1)-1);//以c-1结尾的序列数量减一endmap.put(c,endmap.getOrDefault(c,0)+1);//以c结尾的序列数量减一}else{if(countMap.getOrDefault(c+1,0)>0&&countMap.getOrDefault(c+2,0)>0)
//前面没有序列,从当前c开始创建,判断c+1和c+2是否存在{countMap.put(c,countMap.get(c)-1);countMap.put(c+1,countMap.get(c+1)-1);countMap.put(c+2,countMap.get(c+2)-1);endmap.put(c+2,endmap.getOrDefault(c+2,0)+1);//以c+2结尾的序列加一} elsereturn false;}}return true;}
}
leetcode 659. 分割数组为连续子序列(贪心算法)相关推荐
- LeetCode 659. 分割数组为连续子序列
LeetCode 659. 分割数组为连续子序列 回顾 根据题意,每个元素只会涉及两种情况: 已经存在nums[i]-1结尾的序列,我们把nums[i]接到之前的某个序列后. 尝试以nums[i]为头 ...
- LeetCode 659. 分割数组为连续子序列(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完 ...
- 【12月打卡~Leetcode每日一题】659. 分割数组为连续子序列(难度:中等)
659. 分割数组为连续子序列 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完成上述分割,则 ...
- 659. 分割数组为连续子序列
题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度至少为 3 的子序列,其中每个子序列都由连续整数组成. 如果可以完成上述分割,则返回 true :否则,返 ...
- Leetcode每日一题:659.split-array-into-consecutive-subsequences(分割数组为连续子序列)
思路:看它贴的标签是贪心算法,我只想到了记录每个数出现的个数,并且还是数组,后来一想如果元素太大导致数组长度很长怎么办,老是想不到hash的方法,也没想到记录以nums[i]结尾的连续子序列个数: 贴 ...
- leetcode_659. 分割数组为连续子序列
目录 一.题目 二.解题思路 三.代码 一.题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可 ...
- LeetCode659:分割数组为连续子序列
原文来自于链接https://nickhuang1996.blog.csdn.net/article/details/110628258 目录 一.题目 二.解题思路 三.代码 一.题目 给你一个按升 ...
- 序列每天从0开始_【算法打卡】分割数组为连续子序列
难度:中等 题目: 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度为 3 的子序列,其中每个子序列都由连续整数组成. 如果可以完成上述分割,则返回 true ...
- 《github一天一道算法题》:分治法求数组最大连续子序列和
看书.思考.写代码. /**************************************** copyright@hustyangju * blog: http://blog.csdn.n ...
最新文章
- (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节4:I/O软件层次结构
- 在哪里学python-为什么要选择学python,亮点在哪呢?
- android 多线程 进度条,Android子线程进度条不显示的问题
- 汉字显示原理 GB2312 编码
- 【死磕DDD】聊聊领域建模方法论
- pandas取两个dataframe中不同的行
- 2018西安邮电大学计算机学院,西安邮电大学计算机学院
- 【APP项目环境及发布平台】
- 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
- android手机用户,ZDC:2011年Android手机用户使用行为研究报告
- js实现仿微信红包随机分配
- 数据库是什么?数据库的概念
- Requests模块设置Header的User-Agent
- Oracle EBS 动态调用 XML Publisher 模板 输出不同的报表
- Leetcode困难之1225.报告系统状态的连续日期
- python 文件和文件夹操作
- 新辰:十种外链终极方法 让SEOer外链之路不再孤独!
- 前端常用的CSS代码块
- 【UE4 第一人称射击游戏】05-设置角色动画
- ci 连接myssql