ソードフィンガーオファー—61。ポーカーストレート—分析とコード(Java)

剣はオファーを指します-61。ポーカーストレート-分析とコード[Java]

1.タイトル

LLは今日、トランプのデッキを買いに行ったところ、実際には2つの大きな王と2つの小さな王がいることに気づいたのでとても良い気分でした(デッキは元々54枚のカードでした)。彼はランダムに5枚のカードを引き、手をテストしてストレートを引くことができるかどうかを確認したかったので、可能であれば、スポーツ宝くじを購入することにしました。「ハートエース、スペード3、リトルキング、ビッグキング、スクエアピース5」、「オーマイゴッド!」ストレートじゃない…LLは幸せじゃない、と思ってビッグ\リトルキングができると決心した任意の数と見なされ、Aは1、Jは11、Qは12、Kは13と見なされます。上記の5枚のカードは「1、2、3、4、5」(大王と小王はそれぞれ2と4と見なされます)、「とてもラッキー!」に変えることができます。LLはスポーツ宝くじを購入することにしました。ここで、このカードを使用して上記のプロセスをシミュレートし、LLの幸運を教えてください。カードがストレートを形成できる場合はtrueを出力し、そうでない場合はfalseを出力します。便宜上、サイズキングは0と見なすことができます。

2、分析とコード

1.判定間隔

(1)考える

まず第一に、カードにゼロ以外の繰り返し番号がある場合、それはストレートを作ることができません。
繰り返される数字がない場合は、0以外の最大値と最小値のみをカウントする必要があります.2つの間の差が4に等しい場合(この時点で入力するのに十分な0があります)、それは形成することができますまっすぐ。

(2)コード

public class Solution {
    
    
    public boolean isContinuous(int [] numbers) {
    
    
        if (numbers.length != 5)
            return false;
        int flag[] = new int[13];
        for (int i = 0;i < 13; i++)
            flag[i] = 0;
        
        int minNum = 14, maxNum = 0;
        for (int i = 0; i < 5; i++) {
    
    
            if (numbers[i] == 0)
                continue;
            if (flag[numbers[i] - 1] != 0)
                return false;
            flag[numbers[i] - 1] = 1;
            minNum = Math.min(minNum, numbers[i]);
            maxNum = Math.max(maxNum, numbers[i]);
        }
        
        return ((maxNum - minNum) < 5);
    }
}

(3)結果

実行時間:15ms、占有メモリ:9256k。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/112127819