【leetcode】659. Split Array into Consecutive Subsequences
题目如下:

解题思路:本题可以维护三个字典,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的更多相关文章
- 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)
[LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
- [LeetCode] 659. Split Array into Consecutive Subsequences 将数组分割成连续子序列
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- leetcode 659. Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- 659. Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- [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 ...
- 【leetcode】410. Split Array Largest Sum
题目如下: Given an array which consists of non-negative integers and an integer m, you can split the arr ...
- 【LeetCode】842. Split Array into Fibonacci Sequence 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】548. Split Array with Equal Sum 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 日期 题目地址:https://leetcode ...
- Split Array into Consecutive Subsequences
659. Split Array into Consecutive Subsequences You are given an integer array sorted in ascending or ...
随机推荐
- XX-Net 使用教程(Across the Great Wall)
注意: 由于封锁严重,软件自带IP已经被封杀殆尽.因此需要数分钟到数小时的初始化IP扫描,方能正常运行. 虽然系统内置了公共appid, 还是建议部署自己的appid,公共appid限制看视频.需要注 ...
- 【已转移】【Java架构:系统架构理论】一篇文章搞掂:RESTful
一.定义 1.起源 来源:Roy Fielding的博士论文. 目的:理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构. 定义:一种实现软件通信的架构风格.设计风格, ...
- CentOS 7安装图形界面
之前公司的服务器都是用的CentOS 的系统,需要安装图形界面的时候我会执行以下命令 yum -y groupinstall "X Window System" "Fon ...
- Vagrant 手册之 Provisioning - Shell 配置程序
原文地址 Provisioner 命令:"shell" 示例: node.vm.provision "shell" do |s| s.inline = < ...
- 阅读笔记05-架构师必备最全SQL优化方案(1)
一.优化的哲学 1.优化可能带来的问题? 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统: 优化手段本来就有很大的风险,只不过你没能力意识到和预见到: 任何的技术可以解决一个问题,但 ...
- 关于Visual Studio中书签Bookmark的一些问题
VS自带一个书签功能,但是有个大问题,没有导出功能,因为这个书签是保存在工程.suo文件中,所以在移动,分享,甚至其他情况下很不方便,甚至丢失. 在你分析一个较大的开源,做了30-50个关键代码书签, ...
- get_date.sh
#!/usr/bin#####################################################################日期函数处理#获取某个月份的天数 getM ...
- nmon内存分析
可参考: MemTotal:显示当前服务器物理内存大小,本服务器有8063180 KB≍7874 MB左右. MemFree:显示当前服务器的空闲内存大小,本服务器有5052336 KB≍4934 M ...
- [CF804F]Fake bullions
Solution: 这题可以分为两个部分, 一个部分为处理出每个点最大的金条数与最小的金条数,记为 \([Min_i, Max_i]\) 第二部分为对于 \(n\) 个变量 \(x_i\i ...
- L The Digits String(没有写完,有空补)
链接:https://ac.nowcoder.com/acm/contest/338/L来源:牛客网 Consider digits strings with length n, how many d ...