第三大的数

张开发
2026/4/8 3:55:52 15 分钟阅读

分享文章

第三大的数
给你一个非空数组返回此数组中 第三大的数 。如果不存在则返回数组中最大的数。class Solution { public: int thirdMax(vectorint nums) { } };1.排序class Solution { public: int thirdMax(vectorint nums) { sort(nums.begin(), nums.end(), greaterint()); //默认sort从小到大现在从大到小排序 for (int i 1, diff 1; i nums.size(); i) { if (nums[i] ! nums[i - 1] diff 3) { //前后数字不同diff加加看数到第几个这里不可以diff return nums[i]; } } return nums[0];//只有一个的才会输出这个 } };2.有序集合set有序去重默认从小到大没有push那些插入会变有序所以没有前插后插只有inserterase。。class Solution { public: //遍历数组同时用一个有序集合来维护数组中前三大的数。具体做法是每遍历一个数就将其插入有序集合若有序集合的大小超过 3就删除集合中的最小元素。这样可以保证有序集合的大小至多为 3且遍历结束后若有序集合的大小为 3其最小值就是数组中第三大的数若有序集合的大小不足 3那么就返回有序集合中的最大值。 int thirdMax(vectorint nums) { setint s; for (int num : nums) { s.insert(num); if (s.size() 3) { s.erase(s.begin()); } } return s.size() 3 ? *s.begin() : *s.rbegin(); };遍历数组同时用一个有序集合来维护数组中前三大的数。具体做法是每遍历一个数就将其插入有序集合若有序集合的大小超过 3就删除集合中的最小元素。这样可以保证有序集合的大小至多为 3且遍历结束后若有序集合的大小为 3其最小值就是数组中第三大的数若有序集合的大小不足 3那么就返回有序集合中的最大值。class Solution { public: int thirdMax(vectorint nums) { // set 会自动去重 升序排序 setint s; for (int num : nums) { s.insert(num); // 正确插入元素 } // 迭代器指向 set 起始位置 auto it s.begin(); // 元素个数 3返回第 3 大的数set升序倒数第3个 if (s.size() 3) { // 移动到倒数第 3 个元素 for (int i 0; i s.size() - 3; i) { it; } } // 元素不足 3 个返回最大值最后一个元素 else { it prev(s.end()); } return *it; // 返回迭代器指向的值 } };3.一次遍历遍历数组并用三个变量 a、b 和 c 来维护数组中的最大值、次大值和第三大值以模拟方法二中的插入和删除操作。为方便编程实现我们将其均初始化为小于数组最小值的元素视作「无穷小」比如 −2 63 等。class Solution { public: int thirdMax(vectorint nums) { long a LONG_MIN, b LONG_MIN, c LONG_MIN; for (long num : nums) { if (num a) { c b; b a; a num; } else if (a num num b) { c b; b num; } else if (b num num c) { c num; } } return c LONG_MIN ? a : c; } };

更多文章