class Solution {
/*
思路:用一个参数special来代表相差的值
就比如 1 2 5
2和5相差两个数字,就将 special-=2; (在进行此步运算的时候要时刻注意让当前数的前一个数不为0)
如果遇到一个零,就让special++
最后如果special不是负数 ,返回true
但要注意两个情况:1.重复的数字直接返回false
2.要先排序
*/
public boolean isStraight(int[] nums) {
//记录差值
int special=0;
//对数组进行排序
Arrays.sort(nums);
//i=0情况
if(nums[0]==0)special++;
//遍历
for(int i=1;i<5;i++){
//排除重复情况
if(nums[i]==nums[i-1]&&nums[i]!=0)return false;
//如果当前数为0
if(nums[i]==0)special++;
//如果当前数不为0,且之前的数不为0
else if(nums[i]>0&&nums[i-1]!=0) special-=(nums[i]-nums[i-1]-1);
}
if(special<0)return false;
else return true;
}
}
另外一个思路:最大值减去最小值
class Solution {
/*
思路:对于此题我们只需要计算排序后的差值即可,如果差值大于6,返回false
注意考虑重复
*/
public boolean isStraight(int[] nums) {
//排序
Arrays.sort(nums);
//差值参数
int special=0;
//对初始值进行判断
if(nums[0]!=0)special=nums[4]-nums[0];
//遍历
for(int i=1;i<5;i++){
if(nums[i]!=0) {
//重复的情况
if(nums[i]==nums[i-1])return false;
//计算最大值和最小值的差值
if(special==0) special=nums[4]-nums[i];
}
}
//如果差值大于6,返回false
if(special>4)return false;
//默认返回true
return true;
}
}