随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣414(java)-第三大的数(简单)

题目:

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

示例 1:

输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
示例 2:

输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。
示例 3:

输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
 

提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/third-maximum-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

方法一:

1.先使用冒泡排序,将数组中数按大到小的顺序排列;

2.定义一个新数组,去掉数组中重复的数,放入新数组中;

3.直接输出第三个数即可。

代码1:

 但是有点超时了,测试用例没全过,不知道为啥还通过了?

 方法二:

是看了官方的解释写的:

用一个有序集合(TreeSet)存储数组中前三大的数。具体做法是遍历整个数组,每遍历一个数,就将该数插入有序集合,若有序集合的大小超过 3,就删除集合中的最小元素。这样可以保证有序集合的大小至多为 3,且遍历结束后,若有序集合的大小等于3,其最小值就是数组中第三大的数;若有序集合的大小小于3,那么就返回有序集合中的最大值。

代码2:

小知识:

1.冒泡排序,很重要的排序方法,注意每一轮排序都会产生一个最大值,所以内层循环需要减去i;

2.TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。

3.for-each循环:

        for(数组类型  变量x :数组名){
    引用了变量x的java语句;
   }
4.java中的三目运算:
          表达式1?表达式2:表达式3;
执行顺序:先求解表达式1,若表达式1条件为真,则求表达式2,此时表达式2的值就作为整个语句的结果,否则表达式3 的值作为整个语句的结果。

 

posted on   我不想一直当菜鸟  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示