来看看Java 的解法:
Java 和C++的有序Set 比较
Java的TreeSet
C++ 的 ordered_set
class Solution {
public int thirdMax(int[] nums) {
TreeSet<Integer> s = new TreeSet<Integer>();
for (int num : nums) {
s.add(num);
if (s.size() > 3) {
s.remove(s.first());
}
}
return s.size() == 3 ? s.first() : s.last();
}
}
C++
// leetcode414
// 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
// 示例 1:
// 输入:[3, 2, 1]
// 输出:1
// 解释:第三大的数是 1 。
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
class Solution {
public:
int thirdMax(vector<int>& nums) {
sort(nums.begin(),nums.end());
ordered_set<int> s;
for(int i:nums) {
s.insert(i);
}
int n = s.size();
if(n<3) {
return *(s.find_by_order(n-1));
}
else {
return *(s.find_by_order(n-3));
}
}
};
int main(int argc, char** argv) {
vector<int> nums {2,1};
Solution s;
cout<<s.thirdMax(nums)<<endl;
return 0;
}
这篇博客对比了Java和C++中如何使用有序集合找到数组中的第三大元素。Java采用TreeSet,当集合大小超过3时移除最小元素;C++则利用ordered_set,并在排序后查找。代码示例展示了两种语言的实现方式。
244

被折叠的 条评论
为什么被折叠?



