题目链接
题目(简单)
从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2~10 为数字本身,A为 1,J为11,Q为 12,K为 13,而大、小王可以看成任意数字。
示例
示例 1:
输入: nums = [0, 6, 9, 0, 7]
输出: True
示例 2:
输入: nums = [7, 8, 9, 10, 11]
输出: True
提示:
- nums.length = 5
- 0 <= nums[i] <= 13
题解
遍历
- 时间复杂度 O(1)
- 空间复杂度 O(1)
/**
* @param {number[]} nums
* @return {boolean}
*/
var isStraight = function (nums) {
let numberOfZero = 0;
nums.sort((a, b) => a - b);
let numsCount = 5;
for (let i = 0; i < numsCount - 1; i++) {
if (nums[i] === 0) {
numberOfZero++;
} else if (nums[i] === nums[i + 1]) {
return false;
}
}
return nums[4] - nums[numberOfZero] < 5;
};
集合
- 时间复杂度 O(1)
- 空间复杂度 O(1)
/**
* @param {number[]} nums
* @return {boolean}
*/
var isStraight = function (nums) {
let set = new Set();
let max = 0,
min = 14;
for (let a of nums) {
// 跳过大小王;
if (a == 0) continue;
max = Math.max(a, max);
min = Math.min(a, min);
// 若有重复,提前返回 false
if (set.has(a)) return false;
set.add(a);
}
// 最大牌 - 最小牌 < 5 则可构成顺子
return max - min < 5;
};