# -*- coding:utf-8 -*-
class Solution:
    """
    题目描述

    LL今天心情特别好,
    因为他去买了一副扑克牌,
    发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...
    他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,
    如果抽到的话,他决定去买体育彩票,嘿嘿！！
    “红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,
    他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。

    上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。
    LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,
    然后告诉我们LL的运气如何。为了方便起见,你可以认为大小王是0。
    """

    def IsContinuous(self, numbers):
        # 分析一下题目
        # 要是成顺
        # MAX - MIN <= 4 (因为有大小王,即使小于4也可以在往外扩展)
        # 不能有重复的数字 (用hash去重)

        # O(5) O(5)
        # 边界判断
        if not numbers:
            return False
        # init
        zero_count = 0
        min_number = 99
        max_number = -1
        hash_number = {}
        # 遍历数组
        for number in numbers:
            if not number:
                zero_count += 1
            else:
                if hash_number.has_key(str(number)):
                    return False
                else:
                    hash_number[str(number)] = 1
                    if number > max_number:
                        max_number = number
                    if number < min_number:
                        min_number = number
        return max_number - min_number < 5
