在1 ~ 13中选出n个数,判断是否后一个数等于前一个数加一。
特别地,0最多能出现n次,0用于代替1 ~ 13中任意一个数。
判断步骤:(排序即可轻易做到以下三步)
- 删去0。
- 判断是否有重复元素,true则不合法,即任意两个数相同则一定不合法。
- 最小值与最大值是否相差小于n,true则合法,即可以用0代替缺失的数。
时间复杂度:O(nlogn) ;空间复杂度:O(1) 。
class Solution {
public boolean isStraight(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
int i = 0;
while (nums[i] == 0) {
++i;
}
if (i == n) {
return true;
}
for (int j = i + 1; j < n; ++j) {
if (nums[j - 1] == nums[j]) {
return false;
}
}
return nums[n - 1] - nums[i] < n;
}
}