前言
哈喽,大家好,我是一條。
糊塗算法,難得糊塗
《糊塗算法》專欄上線倒計時——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)

🌈尋寶
⭐今天是堅持刷題更文的第41/100天
⭐各位的點贊、關注、收藏、評論、訂閱就是一條創作的最大動力
⭐更多算法題歡迎關注專欄《leetcode》
為了回饋各位粉絲,禮尚往來,給大家準備了一些算法教學視訊和電子書
需要的小夥伴可以私信我領取,不過一定要先關注哦!不然無法發私信!