栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

leetcode题刷250天(80)——659. 分割数组为连续子序列(for-else)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode题刷250天(80)——659. 分割数组为连续子序列(for-else)

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

解题思路:
乍一看 这不是打扑克呢嘛
从最小的开始抽 1 -> 2 -> 3 -> 3 -> 4 那我就默认 前三个算是一个完整序列了
第二个三就是新序列头了要头插法加入,新加入的4就插在新3后面即可

最关键的一点在于如何处理 3 -> 3 的情况
当前插入序列的值和当前序列的最后一个值是否是连续的
是 插入 break返回
不是 作为新头 并且利用头插法 insert(0, [num])

for - else:
python自带的一种特殊语法
当for循环正常结束时会进入到else语句块中执行代码,
如果for循环是因为执行了break语句导致提前结束的,则不会进入到else语句块

class Solution(object):
    def isPossible(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        res = []

        for num in nums:
            for r in res:
                if num == r[-1] + 1:
                    r.append(num)
                    break
            else:
                res.insert(0, [num])
        
        return all(len(r) >= 3 for r in res)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号