第一种方法:
class Solution {
public:
int thirdMax(vector<int>& nums) {
long long firstNum = LONG_MIN,secondNum = LONG_MIN,thirdNum = LONG_MIN;
for (auto& a : nums) {
if (firstNum < a) {
thirdNum = secondNum;
secondNum = firstNum;
firstNum = a;
}
else if (firstNum > a && secondNum < a) {
thirdNum = secondNum;
secondNum = a;
}
if (secondNum > a && thirdNum<a ) {
thirdNum = a;
}
}
if (thirdNum == LONG_MIN)
return firstNum;
else
return thirdNum;
}
};
第一种方法时间复杂度为O(n);
第二种方法:
class Solution {
public:
int thirdMax(std::vector<int>& nums) {
// 排除重复值
std::unordered_set<int> uniqueNums(nums.begin(), nums.end());
std::vector<int> uniqueSortedNums(uniqueNums.begin(), uniqueNums.end());
// 对去重后的数组进行排序
std::sort(uniqueSortedNums.begin(), uniqueSortedNums.end(), std::greater<int>());
// 根据数组大小返回第三大的数或最大的数
if (uniqueSortedNums.size() >= 3) {
return uniqueSortedNums[2];
} else {
return uniqueSortedNums[0]; // 如果没有第三大的数,返回最大的数
}
}
};
第二种利用unordered_set来自动筛除重复元素,其时间复杂度为O(n log n)。