天天看點

【leetcode刷題】42.撲克牌中的順子——Java版

前言

哈喽,大家好,我是一條。

糊塗算法,難得糊塗

《糊塗算法》專欄上線倒計時——7天

本題出自陌陌二面

Question

劍指 Offer 61. 撲克牌中的順子

難度:簡單

從撲克牌中随機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為1,J為11,Q為12,K為13,而大、小王為 0 ,可以看成任意數字。A 不能視為 14。

示例 1:

輸入: [1,2,3,4,5]
輸出: True      

示例2:

輸入: [0,0,1,2,5]
輸出: True      

限制:

數組長度為 5

數組的數取值為 [0, 13] .

Solution

排序+去重

最大-最小<5

周遊五張牌,遇到大小王直接跳過。

判别重複: 利用 Set 實作周遊判重

擷取最大 / 最小的牌周遊統計即可。

Code

所有leetcode代碼已同步至github

歡迎star

/**
 * @author 一條coding
 */
class Solution {
    public boolean isStraight(int[] nums) {
        Set<Integer> repeat = new HashSet<>();
        int max = 0, min = 14;
        for(int num : nums) {
            if(num == 0) continue; // 跳過大小王
            max = Math.max(max, num); // 最大牌
            min = Math.min(min, num); // 最小牌
            if(repeat.contains(num)) return false; // 若有重複,提前傳回 false
            repeat.add(num); // 添加此牌至 Set
        }
        return max - min < 5; // 最大牌 - 最小牌 < 5 則可構成順子
    }
}      

Result

複雜度分析
  • 時間複雜度:O(N)
【leetcode刷題】42.撲克牌中的順子——Java版

🌈尋寶

⭐今天是堅持刷題更文的第41/100天

⭐各位的點贊、關注、收藏、評論、訂閱就是一條創作的最大動力

⭐更多算法題歡迎關注專欄《leetcode》

為了回饋各位粉絲,禮尚往來,給大家準備了一些算法教學視訊和電子書

需要的小夥伴可以私信我領取,不過一定要先關注哦!不然無法發私信!

【leetcode刷題】42.撲克牌中的順子——Java版