1、无脑写法,先排序,然后判断重复、间隔数有没有大于0的个数
class Solution {
public:
bool isStraight(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int count0 = 0;
int i = 0;
while (i < nums.size() - 1 && !nums[i])
{
count0++;
i++;
}
if (i < nums.size() - 1)
{
int top = nums[i++];
for ( ; i < nums.size(); ++i)
{
if (nums[i] - top - 1 > count0 || nums[i] == top)
return false;
count0 -= (nums[i] - top - 1);
top = nums[i];
}
}
return true;
}
};
2、优化,排序整个数组中无重复下max - min < 5
class Solution {
public:
bool isStraight(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int i = 0;
while (i < nums.size() - 1 && !nums[i])
i++;
if (i < nums.size() - 1)
{
int min = nums[i++];
int max = nums[nums.size() - 1];
if (max - min > 4)
return false;
for ( ; i < nums.size(); ++i)
{
if (nums[i] == nums[i - 1])
return false;
}
}
return true;
}
};
3、再优化,不用排序,模拟哈希
class Solution {
public:
bool isStraight(vector<int>& nums)
{
vector<int> park(14, 0);
int max = 0;
int min = 13;
for(auto x : nums)
{
if (x != 0)
{
park[x]++;
if (park[x] > 1)
return false;
if (x > max)
max = x;
if (x < min)
min = x;
if (max - min > 4)
return false;
}
}
return true;
}
};