目录

一、题目

二、解题思路

三、代码


一、题目

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

如果可以完成上述分割,则返回 true ;否则,返回 false 。

示例 1:

输入: [1,2,3,3,4,5]
输出: True
解释:
你可以分割出这样两个连续子序列 : 
1, 2, 3
3, 4, 5

示例 2:

输入: [1,2,3,3,4,4,5,5]
输出: True
解释:
你可以分割出这样两个连续子序列 : 
1, 2, 3, 4, 5
3, 4, 5

示例 3:

输入: [1,2,3,4,4,5]
输出: False

提示:

输入的数组长度范围为 [1, 10000]

二、解题思路

每次都记录以哪个数字结尾:

1.当前数字如果在count1里找到之前的数字结尾的计数不为0,则count2里添加当前数字结尾的计数,count1里之前的数字结尾计数减1;

2.同理,当前数字如果在count2里找到之前的数字结尾的计数不为0,则count3up里添加当前数字结尾的计数,count2里之前的数字结尾计数减1;

3.三个数满足要求了,只需要当前数字如果在count3up里找到之前的数字结尾的计数不为0,则count3up里添加当前数字结尾的计数,count3up里之前的数字结尾计数减1;

4.最后只要判断count1和count2里的数字结尾计数是否都为0即可;

三、代码

from collections import defaultdictclass Solution:def isPossible(self, nums: list) -> bool:""":param nums::return:每次都记录以哪个数字结尾:当前数字如果在count1里找到之前的数字结尾的计数不为0,则count2里添加当前数字结尾的计数,count1里之前的数字结尾计数减1;同理,当前数字如果在count2里找到之前的数字结尾的计数不为0,则count3up里添加当前数字结尾的计数,count2里之前的数字结尾计数减1;三个数满足要求了,只需要当前数字如果在count3up里找到之前的数字结尾的计数不为0,则count3up里添加当前数字结尾的计数,count3up里之前的数字结尾计数减1;"""count1 = defaultdict(int)  # 一个数count2 = defaultdict(int)  # 两个数count3up = defaultdict(int)  # 三个数或以上for i in nums:if count1[i - 1]:count1[i - 1] -= 1count2[i] += 1elif count2[i - 1]:count2[i - 1] -= 1count3up[i] += 1elif count3up[i - 1]:count3up[i - 1] -= 1count3up[i] += 1else:count1[i] += 1return sum(count1.values()) == 0 and sum(count2.values()) == 0if __name__ == '__main__':nums = [1, 2, 3, 3, 4, 4, 5, 5]s = Solution()ans = s.isPossible(nums)print(ans)

leetcode_659. 分割数组为连续子序列相关推荐

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

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

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

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

  3. leetcode 659. 分割数组为连续子序列(贪心算法)

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 华为云客户端_华为云新一代S6云服务器缘何深受中小企业青睐?
  2. 三层交换机实现不同vlan间的通信
  3. 生成tfreocrds
  4. 上云难?TA霸气回应:不要你觉得,一键上云 so easy!
  5. PLSQL创建用户及权限分配
  6. ffmpeg——vs集成ffmpeg相关开发
  7. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)
  8. Intel BIGDL 探索
  9. Dell Dock 无法启动解决办法
  10. lede usb启动_OpenWrt LEDE 自动挂载USB U盘的方法
  11. 了解C语言中的exec函数家族
  12. Halcon 算子 convexity
  13. Typora导入CSDN
  14. 区块链基础知识与关键技术解析
  15. 2019年 十款Mac上必备的实用软件列表
  16. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》
  17. 考研英语一和二的区别
  18. 生命体征检测雷达,人体存在感知应用
  19. django + MySQL + flup + Nginx 的一些相关配置文件的备份
  20. 小爱同学服务器维修,今天给大家看看小爱同学的内部拆解详情

热门文章

  1. nodejs入门(五)
  2. 电脑看网页视频没声音, 其他的都有声音
  3. RimWorld模组教程之物品
  4. java 输入函数_java新手问题——输入函数
  5. 黑马程序员—(iOS开发)C语言语法解析---(三)
  6. Mac mtr 网络分析工具安装
  7. windows 找不到文件 %windir%\systempropertiesadvanced.exe
  8. 创业旅途008——公司注册
  9. over在SQL里就什么意思
  10. 支付宝砸二亿让用户加好友攒福,这是要搞哪样?