撲克牌順子

題目描述

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的運氣如何, 若是牌能組成順子就輸出true,不然就輸出false。爲了方便起見,你能夠認爲大小王是0。java

思路

bitmap計數排序的思想,大數據排序去重。大數據

時間複雜度O(n),空間複雜度O(1)code

代碼

public class Solution {
    //bitmap
    public boolean isContinuous(int [] numbers) {
        if(numbers == null || numbers.length != 5)    return false;
        int bitmap = 0;
        int num = 0;
        int max = -1;
        int min = 14;
        for(int i = 0; i < numbers.length; i++) {
            num = numbers[i];
            if(num == 0){
                continue;
            } else if(num < 0 || num > 13) {
                return false;
            } else if((bitmap >> num & 1) == 1) {
                return false;
            } else {
                if(num > max) {
                    max = num;
                }
                if(num < min) {
                    min = num;
                }
                if(max - min > 4) {
                    return false;
                }
                bitmap |= (1 << num);
            }
        }
        return true;
    }
}

筆記

排序

相關文章
相關標籤/搜索