剑指 Offer 61. 扑克牌中的顺子(简单,哈希表)

简介: 剑指 Offer 61. 扑克牌中的顺子(简单,哈希表)

题目链接https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/



思路一:哈希表+遍历


class Solution {
public:
  //方法一:哈希表 + 遍历
  //大小王可以当任意牌,大小王可以重复   12345是顺子   10JQKA不是顺子
  //时间复杂度:O(n)=O(5)=O(1)
  //空间复杂度:O(n)=O(5)=O(1)
  bool isStraight(vector<int>& nums) {
    unordered_set<int> set;
    int ma = 0;
    int mi = 14;
    for (auto num : nums) {
      if (num == 0) continue;   //跳过大小王
      ma = max(ma, num);     //记录最大牌
      mi = min(mi, num);     //记录最小牌
      if (set.count(num)) return false;   //有重复牌肯定不是顺子
      set.insert(num);   //插入元素
    }
    return ma - mi < 5;   //最大牌和最小牌差距5肯定不是顺子
  }
};


思路二:排序+遍历


class Solution {
  //排序+遍历
  //时间复杂度:O(nlogn)=O(5log5)=O(1)
  //空间复杂度:O(1)
public:
  bool isStraight(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    int min_index = 0;
    while (min_index < nums.size() && nums[min_index] == 0) {   //跳掉大小王
      min_index++;
    }
    for (int i = min_index; i < nums.size() - 1; i++) {    //判断有没有相同牌
      if (nums[i] == nums[i + 1]) return false;
    }
    return nums[nums.size() - 1] - nums[min_index] < 5;  //判断最大值最小值差多大
  }
};


目录
相关文章
|
7月前
剑指 Offer 51:数组中的逆序对(归并排序)
剑指 Offer 51:数组中的逆序对(归并排序)
40 0
|
6月前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
机器学习/深度学习 Cloud Native
【刷题日记】剑指 Offer II 083. 没有重复元素集合的全排列
本次刷题日记的第 35 篇,力扣题为:剑指 Offer II 083. 没有重复元素集合的全排列 ,中等
|
7月前
剑指 Offer 61:扑克牌中的顺子
剑指 Offer 61:扑克牌中的顺子
34 0
【剑指offer】-扑克牌顺子-44/67
【剑指offer】-扑克牌顺子-44/67
图解LeetCode——面试题61. 扑克牌中的顺子
图解LeetCode——面试题61. 扑克牌中的顺子
125 1
剑指offer_递归与循环---扑克牌顺子
剑指offer_递归与循环---扑克牌顺子
51 0
|
容器
剑指offer 69. 扑克牌的顺子
剑指offer 69. 扑克牌的顺子
94 0
归并排序应用——剑指 Offer 51. 数组中的逆序对
归并排序应用——剑指 Offer 51. 数组中的逆序对
61 0
|
C++ Python
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字