题目如下:

解题思路:本题可以维护三个字典,dic_1保存没有组成序列的单元素,dic_2保存组成了包含两个元素的序列中的较大的元素,dic_3保存组成了包括三个或者三个以上元素的序列中的最大值。因为合法的序列至少要三个元素,解题的关键是要使得dic_2和dic_1的元素尽快满足条件。对于任意一个还没有加入字典的元素,加入字典的优先级从高到低排序分别是dic_2 > dic_1 > dic_3,即优先匹配dic_2,接下来匹配dic_1,再就是dic_3,如果三个都不满足,说明在目前条件下市落单的元素,加入dic_1。这里需要主要的是如果匹配上了dic_2,那么会把这个序列从dic_2中移除,加入dic_3;同理匹配dic_1的话则将dic_1移除加入dic_2。

代码如下:

class Solution(object):
def isPossible(self, nums):
dic_1 = {}
dic_2 = {}
dic_3 = {}
for i in nums:
if i-1 in dic_2:
dic_2[i-1] -= 1
if dic_2[i-1] == 0:
del dic_2[i-1]
if i in dic_3:
dic_3[i] += 1
else:
dic_3[i] = 1
elif i-1 in dic_1:
dic_1[i - 1] -= 1
if dic_1[i - 1] == 0:
del dic_1[i - 1]
if i in dic_2:
dic_2[i] += 1
else:
dic_2[i] = 1
elif i-1 in dic_3:
dic_3[i - 1] -= 1
if dic_3[i - 1] == 0:
del dic_3[i - 1]
if i in dic_3:
dic_3[i] += 1
else:
dic_3[i] = 1
else:
if i in dic_1:
dic_1[i] += 1
else:
dic_1[i] = 1
#print dic_1,dic_2,dic_3
for k,v in dic_1.iteritems():
if k-1 not in dic_3 or dic_3[k-1] < v:
return False
dic_3[k-1] -= v dic_1[k] = 0 if k in dic_3:
dic_3[k] += v
else:
dic_3[k] = 1 for k,v in dic_2.iteritems():
if k-2 not in dic_3 or dic_3[k-2] < v:
return False
dic_3[k-2] -= v dic_2[k] = 0 if k in dic_3:
dic_3[k] += v
else:
dic_3[k] = 1 return True

【leetcode】659. Split Array into Consecutive Subsequences的更多相关文章

  1. 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)

    [LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...

  2. [LeetCode] 659. Split Array into Consecutive Subsequences 将数组分割成连续子序列

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  3. leetcode 659. Split Array into Consecutive Subsequences

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  4. 659. Split Array into Consecutive Subsequences

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  5. [LC] 659. Split Array into Consecutive Subsequences

    Given an array nums sorted in ascending order, return true if and only if you can split it into 1 or ...

  6. 【leetcode】410. Split Array Largest Sum

    题目如下: Given an array which consists of non-negative integers and an integer m, you can split the arr ...

  7. 【LeetCode】842. Split Array into Fibonacci Sequence 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  8. 【LeetCode】548. Split Array with Equal Sum 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 日期 题目地址:https://leetcode ...

  9. Split Array into Consecutive Subsequences

    659. Split Array into Consecutive Subsequences You are given an integer array sorted in ascending or ...

随机推荐

  1. linux发版

    使用MobaXterm_v8.5 1.upload需要更换的文件 2.关闭Tomcat    cd /usr/local/tomcat/apache-tomcat-6.0.30-pcitcaly/  ...

  2. 牛客:t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数(数论+贪心)

    https://ac.nowcoder.com/acm/contest/907/B t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数 分析: 根据约数和定理:对于一个大于1正整数 ...

  3. springboot启动报错start bean 'eurekaAutoServiceRegistration' NullPointerException

    解决方案参考:https://blog.csdn.net/hhj13978064496/article/details/82825365 我将eureka的依赖包放到了依赖包的最下面,启动报错, 如下 ...

  4. svn 中的add 和commit命令有何区别

    add 功能:向文件拷贝所在的文件夹中添加新的文件,并作出标识,是新添加的,下一步提交时将一并提交到Subversion版本库中去.简单的说就是将一新文件加入svn,你添加再提交后该文件就进入subv ...

  5. 简单了解winform

    WinForm是·Net开发平台中对Windows Form的一种称谓. Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的窗体应用程序.可以访问数据库中的数据,并在窗体上显 ...

  6. 《图解设计模式》读书笔记1-2 Adapter模式

    目录 Adapter即适配器,可以类比为将220V的电压的电源转为5V电压的手机充电器,起转换的作用. 明确概念: Adaptee:被适配者,即220v电压的电源 Adapter:适配器,即手机充电器 ...

  7. mariadb(一)基础

    一.数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来 ...

  8. EF框架之——Code First以及踩过的这些“坑”

    传送门 Code First使用步骤 Code First报错和解决办法 以前在上海做了一段时间的Asp.net,基本用的都是.net自带的EF框架连接数据库,不过都是用的Model First,最近 ...

  9. JavaScript高级程序设计(第3版) 第四章(变量、作用域和内存问题)

    4.1 基本类型和引用类型的值             1.基本类型的值是(简单的数据段),引用类型的值是(保存在内存中的对象). 基本类型的值在内存中占据固定大小的空间,因此被保存在栈中.(lifo ...

  10. jQuery基础--插件

    1. 插件 1.1. 常用插件 插件:jquery不可能包含所有的功能,我们可以通过插件扩展jquery的功能. jQuery有着丰富的插件,使用这些插件能给jQuery提供一些额外的功能. 1.1. ...