给你一个按升序排序的整数数组 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. 分割数组为连续子序列(贪心算法)相关推荐

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

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

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

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

  3. 【12月打卡~Leetcode每日一题】659. 分割数组为连续子序列(难度:中等)

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

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

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

  5. Leetcode每日一题:659.split-array-into-consecutive-subsequences(分割数组为连续子序列)

    思路:看它贴的标签是贪心算法,我只想到了记录每个数出现的个数,并且还是数组,后来一想如果元素太大导致数组长度很长怎么办,老是想不到hash的方法,也没想到记录以nums[i]结尾的连续子序列个数: 贴 ...

  6. leetcode_659. 分割数组为连续子序列

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

  7. LeetCode659:分割数组为连续子序列

    原文来自于链接https://nickhuang1996.blog.csdn.net/article/details/110628258 目录 一.题目 二.解题思路 三.代码 一.题目 给你一个按升 ...

  8. 序列每天从0开始_【算法打卡】分割数组为连续子序列

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

  9. 《github一天一道算法题》:分治法求数组最大连续子序列和

    看书.思考.写代码. /**************************************** copyright@hustyangju * blog: http://blog.csdn.n ...

最新文章

  1. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节4:I/O软件层次结构
  2. 在哪里学python-为什么要选择学python,亮点在哪呢?
  3. android 多线程 进度条,Android子线程进度条不显示的问题
  4. 汉字显示原理 GB2312 编码
  5. 【死磕DDD】聊聊领域建模方法论
  6. pandas取两个dataframe中不同的行
  7. 2018西安邮电大学计算机学院,西安邮电大学计算机学院
  8. 【APP项目环境及发布平台】
  9. 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
  10. android手机用户,ZDC:2011年Android手机用户使用行为研究报告
  11. js实现仿微信红包随机分配
  12. 数据库是什么?数据库的概念
  13. Requests模块设置Header的User-Agent
  14. Oracle EBS 动态调用 XML Publisher 模板 输出不同的报表
  15. Leetcode困难之1225.报告系统状态的连续日期
  16. python 文件和文件夹操作
  17. 新辰:十种外链终极方法 让SEOer外链之路不再孤独!
  18. 前端常用的CSS代码块
  19. 【UE4 第一人称射击游戏】05-设置角色动画
  20. ci 连接myssql

热门文章

  1. 95. 不同的二叉搜索树 II
  2. 使用CreateThread函数创建线程
  3. Kettle7.1在window启动报错
  4. BZOJ 1113: [Poi2008]海报PLA
  5. 2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图
  6. git学习相关的博客地址
  7. ASP .NET MVC 之Entity Framework入门教程及源码
  8. MFC学习中遇到的小问题和解决方案
  9. PHP起点 - 运算符
  10. 高效的组合数计算方法