扑克牌顺子

题目:现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:

1. A为1,J为11,Q为12,K为13,A不能视为14
2. 大、小王为 0,0可以看作任意牌
3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
例如:给出数据[6,0,2,0,4]
中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]
这样这五张牌在[2,6]区间连续,输出true
数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]

思路:

  • 1.数组排序
  • 2.遍历数组
  • 3.若为0,记录0的个数加1
  • 4.若不为0,记录和下一个元素的间隔
  • 5.最后比较0的个数和间隔数,间隔数>0的个数则不能构成顺子
  • 6.注意中间如果有两个元素相等则不能构成顺子

代码:

复制代码
 1 function IsContinuous(numbers)
 2 {
 3     // write code here
 4        /* 
 5        分治思想 五张牌构成顺子的充分条件需要满足
 6        1. 不重复 使用Set去重
 7        2. max - min < 5 最大牌值 减去 最小牌值 小于5 且跳过大小王
 8     */
 9 
10 const set = new Set();
11 let min = 14, max = 0; // min和max的初始值是两个边界值[0, 13]
12     for(const i of numbers){
13          // 遇到大小王 跳过
14         if(!i) continue;
15          // 遇到重复则直接 返回false
16         if(set.has(i)) return false;
17         set.add(i);
18          // 迭代更新 min和max 以及set
19        min = Math.min(min, i);
20         max = Math.max(max, i);
21     }
22     return max - min < 5;
23 }
24 module.exports = {
25     IsContinuous : IsContinuous
26 };
复制代码

 

复制代码
 1 function IsContinuous(numbers)
 2 {
 3     // write code here
 4     if (numbers && numbers.length > 0) {
 5         numbers.sort();
 6         let kingNum = 0;
 7         let spaceNum = 0;
 8         for (let i = 0; i < numbers.length - 1; i++) {
 9           if (numbers[i] === 0) {
10             kingNum++;
11           } else {
12             const space = numbers[i + 1] - numbers[i];
13             if (space == 0) {
14               return false;
15             } else {
16               spaceNum += space - 1;
17             }
18           }
19         }
20         return kingNum - spaceNum >= 0;
21       }
22       return false;
23 }
24 module.exports = {
25     IsContinuous : IsContinuous
26 };
复制代码

 

posted @   icyyyy  阅读(951)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示