题解 | #扑克牌顺子#
扑克牌顺子
https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
#include <climits> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型vector * @return bool布尔型 */ bool IsContinuous(vector<int>& nums) { vector<int>& numbers = nums; sort(numbers.begin(), numbers.end()); int zero = 0; int gap = 0; for (int i = 0; i < numbers.size() - 1; i++) { while (numbers[i] == 0) { zero++; i++; } if(i == numbers.size()-1){ return true; } if(numbers[i+1] == numbers[i]){ return false; } gap += numbers[i + 1] - numbers[i] - 1; } if (gap > zero) { return false; } else { return true; } } };
先对扑克牌进行排序,然后计算扑克牌中零的个数和非零牌之间的间隔总数,对比零牌张数和非零牌间隔总数,如果间隔总数 > 零牌数,则无法构成顺子,否则可以构成顺子。时间复杂度O(nlogn), 空间复杂度O(1).