【剑指offer】【排序】61. 扑克牌中的顺子

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

思路

时间复杂度:O(nlogn)
空间复杂度: O(1)

  1. 将数据排序
  2. 第一次遍历数组(过滤掉有重复元素的),如果遇到非0元素,并且前后两个数相等,说明不是顺子, 直接返回false;
  3. 第二次遍历数组(判断是不是顺子),因为0是万能的,所以最后直接判断最大的数和不为0的最小的数的差值是否小于等于4;
    是,true; 否,false;
  4. 其它情况,都返回false;

排序

class Solution {
public:
    bool isStraight(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        for(int i = 1; i < nums.size(); i++)
            if(nums[i] && nums[i] == nums[i - 1])
                return false;
        
        for(auto x : nums)
            if(x) return nums.back() - x <= 4;
        
        return false;
    }
};
posted @ 2020-04-20 16:35  NaughtyCoder  阅读(74)  评论(0)    收藏  举报