• 【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
  • 相关阅读:
    Delphi 通过Access Violation地址错误找到错误的哪行代码
    GitHub 转载:github删除repository
    GitHub 转载:github的高级搜索
    SVN 转载:svn报错:privious operation has not finshed;run 'cleanup' if it was interrupted
    GitHub 转载:github新手使用
    Delphi 对应JAVA的MD5加密处理
    Delphi 对应JAVA的BASE64位加密处理
    Delphi 对应JAVA的URL编码处理
    python基础(五)
    DataFrame
  • 原文地址:https://www.cnblogs.com/seyjs/p/9590537.html
Copyright © 2020-2023  润新知