本文主要是介绍剑指 Offer(第2版)面试题 61:扑克牌的顺子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
剑指 Offer(第2版)面试题 61:扑克牌的顺子
- 剑指 Offer(第2版)面试题 61:扑克牌的顺子
- 解法1:排序
剑指 Offer(第2版)面试题 61:扑克牌的顺子
题目来源:81. 扑克牌的顺子
解法1:排序
能组成顺子需要满足的两个条件是:
- 除了大小王(定义为 0)以外不能出现两个相同的数字;
- 排序后两个相邻数字的差值不能大于 0 的个数。
按照这两个条件进行判断即可。
代码:
class Solution
{
public:bool isContinuous(vector<int> numbers){// 特判if (numbers.size() != 5)return false;// n = 5int n = numbers.size();sort(numbers.begin(), numbers.end());int countZero = 0, countGap = 0;// 统计数组中 0 的个数for (int number : numbers)if (number == 0)countZero++;// 统计数组中的间隔数目int i = countZero, j = i + 1;while (j < n){// 有两张牌相同,不可能是顺子if (numbers[i] == numbers[j])return false;countGap += numbers[j] - numbers[i] - 1;i++;j++;}return countZero >= countGap;}
};
复杂度分析:
时间复杂度:O(N),其中 N 是数组 numbers 的长度,N = 5。
空间复杂度:O(1)。
这篇关于剑指 Offer(第2版)面试题 61:扑克牌的顺子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!