剑指offer 面试题61. 扑克牌中的顺子
1.先将数组排序
2.遍历数组,因为排序后0在最前面,所以先统计0的个数.
3.当前元素非0时,查看当前元素后面的元素与当前元素的差值
int differenceValue=nums[i+1]-nums[i];
如果differenceValue为0
则存在重复元素,返回false.(因为当前元素非零,所以一定是非零重复的两个数)
如果differenceValue>0
因为0(大小王)可以代表任意任意数字
判断0的个数:zeroCount
是否大于当前元素后面的元素与当前元素的差值-1: differenceValue-1
如果differenceValue-1>zeroCount则返回false,因为0不够用
否则0的个数-(differenceValue-1)
zeroCount-=(differenceValue-1);
完整代码
java:
class Solution {
public boolean isStraight(int[] nums) {
Arrays.sort(nums);
int zeroCount=0;
for(int i=0;i<4;i++){
if(nums[i]==0){
zeroCount++;
continue;
}
int differenceValue=nums[i+1]-nums[i];
if(differenceValue==0){
return false;
}
if(differenceValue-1>zeroCount){
return false;
}else{
zeroCount-=(differenceValue-1);
}
}
return true;
}
}