建设电动车官方网站,免费网站下载大全,怎么查看网站用什么做的,视频网站的防盗链是怎么做的题目
从若干副扑克牌中随机抽 5 张牌#xff0c;判断是不是一个顺子#xff0c;即这5张牌是不是连续的。2#xff5e;10为数字本身#xff0c;A为1#xff0c;J为11#xff0c;Q为12#xff0c;K为13#xff0c;而大、小王为 0 #xff0c;可以看成任意数字。A 不能视…题目
从若干副扑克牌中随机抽 5 张牌判断是不是一个顺子即这5张牌是不是连续的。210为数字本身A为1J为11Q为12K为13而大、小王为 0 可以看成任意数字。A 不能视为 14。
思路
5张牌形成顺子的充分条件是
1所有牌无重复但是大王、小王可以同时出现 2设此5张牌中 最大的牌是max最小的牌的是min大小王除外则需满足max - min 5
因此可以将问题转化成此5张牌是否可以满足以上两个条件
方法一集合Set 遍历
遍历五张牌遇到大小王0直接跳过判别重复利用Set实现遍历判重获取最大/最小牌借助辅助变量ma和mi遍历统计即可
算法流程如下
java代码如下
class Solution{public boolean isStraight(int[] nums){SetInteger 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;//如果有重复提前返回falserepeat.add(num);//添加到Set}return max - min 5;//判断是否可以构成顺子}
}方法二排序 遍历
先对数组执行排序判别重复排序后的数组相同数字相邻可通过判断 nums[i] 是否 等于nums[i1]来判重获取最大 / 最小牌数组末元素nums[4]为最大牌nums[joker]为最小值其中joker为大小王的数量
算法流程如下
java代码如下
class Solution{public boolean isStraight(int[] nums){int joker 0;Arrays.sort(nums);//数组排序for(int i 0; i 4; i){if(nums[i] 0){joker;} else if(nums[i] nums[i1]){return false;//如果有重复提前返回false}}return nums[4] - nums[joker] 5;//最大牌 - 最小牌 5 即可构成顺子}
}