剑指 Offer 61. 扑克牌中的顺子java题解

it2024-04-02  74

就不是很懂题目的意思,顺子是啥,遂去看题解

1.题目

2.分析

根据题意,此 5张牌是顺子的 充分条件 如下:

除大小王外,所有牌无重复 ; 设此 5张牌中最大的牌为max ,最小的牌为min (大小王除外),则需满足: max−min<5

遇到大小王(0)跳过, 用set判重, 借助辅助变量max,min。

3.代码

class Solution { public boolean isStraight(int[] nums) { HashSet<Integer> set=new HashSet<>(); int max=-1,min=14; for(int i=0;i<nums.length;i++){ //大小王0,直接跳过 if(nums[i]==0){ continue; } //有重复数字 if(set.contains((Integer)nums[i])){ return false; } //无重复数字就加入 set.add(nums[i]); //更新max和min if(nums[i]>max){ max=nums[i]; } if(nums[i]<min){ min=nums[i]; } } //检查max-min<5 if((max-min)>=5){ return false; } return true; } }

4.复杂度

时间复杂度 O(N) = O(5) = O(1) : 其中 N 为 nums 长度,本题中 N≡5 ;遍历数组使用 O(N) 时间。 空间复杂度 O(N) = O(5) = O(1): 用于判重的辅助 Set 使用 O(N) 额外空间。

5.结果

最新回复(0)