第六十二题 模拟第二题
方法一 排序 ,复杂度就是nlogn了
python直接sort排序之后塞入数字
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#

# @param numbers int整型一维数组 
# @return bool布尔型
#
class Solution:
    def IsContinuous(self , numbers: List[int]) -> bool:
        # write code here
        # 排序
        numbers.sort()
        renyi=0
        # 统计任意牌的个数
        for i in numbers:
            if i==0:
                renyi+=1
            else:
                break
                
        # 现在知道有多少个任意牌,后面遍历,如果缺了,就塞入相差的个数比如说7-4 则插入56 两张
        last=numbers[renyi]
        for i in numbers[renyi+1:]:
            if i==last:
                return False
            if i-last!=1:
                renyi-=(i-last-1)
            last=i
            if renyi<0:
                return False
        return True

方法二 因为数字是有大小范围的 所以不用排序的函数 只要遍历一次就可以“排序”
class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        // O(n)的方法,就说明不能排序 
        // 因为牌的大小是有范围的,所以可以利用数组来一次遍历就排序
        int zero=0;
        int a[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        // 一次遍历,统计出0的个数 以及将数字统计到数组中,如果说 数组中出现过这个数字,则直接return false
        for(int i=0;i<numbers.size();i++)
        {
            if(numbers[i]==0)
                zero++;
            else
            {
                if(a[numbers[i]]==0)
                    a[numbers[i]]=1;
                else
                    return false;
            }
        }
        // 遍历判断是否符合要求
        int sum=0;
        int i=0;
        // 首先遍历到第一个不是0的位置,表示从此开始,后面5个必须是顺子
        while(a[i]==0)
            i++;
        // 除去第一个位置 向后遍历四次
        while(sum<4)
        {
            sum++;
            i++;
            // 如果说位置空了,但是有万能牌,万能牌来替代
            // 如果位置空,但是没有万能牌,return false
            if(a[i]==0 && zero>0)
                zero--;
            else if(a[i]==0 && zero<=0)
                return false;
        }
        // 遍历结束 return true
        return true;
    }
};