题目描述
解法 排序
class Solution {
public:
bool isStraight(vector<int>& nums) {
int super = 0;
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size() - 1; i++){
if(nums[i] == 0) {
super ++;
continue;
}
if(nums[i] == nums[i+1]) return false;
super -= nums[i + 1] - nums[i] - 1;
if(super < 0) return false;
}
return true;
}
};
时间复杂度O(NlogN)
空间复杂度O(1)
解法 集合
大佬的办法,保证两个条件
- 除0以外所有的元素都不重复
- 元素最大值-元素最小值小于5
c++的set的插入用insert,且c++不能直接返回set的最大值和最小值
class Solution {
public:
bool isStraight(vector<int>& nums) {
set<int> s;
int max = -1;
int min = 15;
for(int num : nums) {
if(s.find(num) != s.end() && num != 0) return false;
else {
s.insert(num);
if(num > max) max = num;
if(num < min && num != 0) min = num;
}
}
return max - min < 5 ? true : false;
}
};
简洁一点可以写这样
class Solution {
public:
bool isStraight(vector<int>& nums) {
set<int> s;
int max = -1;
int min = 15;
for(int num : nums) {
if(num == 0) continue;
if(s.find(num) != s.end() && num != 0) return false;
s.insert(num);
if(num > max) max = num;
if(num < min) min = num;
}
return max - min < 5 ? true : false;
}
};
时间复杂度O(NlogN)
空间复杂度O(N)
java的hashset的add复杂度为O(1),所以总体是O(N)