题目:

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

示例 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 的值作为整个语句的结果。

力扣414(java)-第三大的数(简单)的更多相关文章

  1. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  2. 力扣561. 数组拆分 I-C语言实现-简单题

    题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...

  3. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  4. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  5. 力扣896. 单调数列-C语言实现-简单题

    题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...

  6. 力扣(LeetCode) 263. 丑数

    编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 × 3 示例 2: 输入: 8 输出: true ...

  7. 力扣(LeetCode)202. 快乐数

    编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...

  8. 力扣(LeetCode)15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  9. 力扣(LeetCode)1.两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  10. 力扣 - 剑指 Offer 49. 丑数

    题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...

随机推荐

  1. vue peek 解决了 vue-template 加载 相对目录 ./components 组件内容 vscode

    点击组件跳转,vue-helper 带@的能跳转,相对目录的不能跳转.vue peek 解决了这个问题.

  2. K8s中Role(ClusterRole)资源类型rules字段详解

    在Kubernetes(K8s)中,Role资源类型的rules字段用于定义哪些操作(verbs)可以在哪些资源(resources)上执行.Role是一种命名空间级别的资源,它允许你对命名空间内的资 ...

  3. 多线程系列(十九) -Future使用详解

    一.摘要 在前几篇线程系列文章中,我们介绍了线程池的相关技术,任务执行类只需要实现Runnable接口,然后交给线程池,就可以轻松的实现异步执行多个任务的目标,提升程序的执行效率,比如如下异步执行任务 ...

  4. [置顶] 彻底停止运行线程池ThreadPoolExecutor

    最近系统开发时遇到这样一个需求: 该功能执行时间很久,如果运行过程出现错误,也无法将其停止,必须眼睁睁的看着它浪费很久时间,除非停止服务器. 于是,我就想着如何给该功能加上一个"停止&quo ...

  5. Java加密技术(四)——非对称加密算法RSA

    Java非对称加密算法rsa     接下来我们介绍典型的非对称加密算法--RSA RSA     这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很 ...

  6. P2602 [ZJOI2010] 数字计数:数位DP

    https://www.luogu.com.cn/problem/P2602 // #include <iostream> // #include <iomanip> // # ...

  7. isPrimitive()方法和包装类

    java.lang.Class.isprimitive()是说:确定指定的Class对象是基本类型,其返回是个boolean值,true代表你指定的这个Class对象是基本类型,false代表这个Cl ...

  8. 详解SSL证书系列(6)了解HTTP及网络基础

    使用HTTP协议访问Web 你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗?   Web页面当然不会凭空显示出来.根据Web浏览器地址栏中指定的URL,W ...

  9. KingbaseES Json 系列十二:Json其他函数

    KingbaseES Json 系列十二--Json其他函数(JSONB_TYPEOF,JSON_SCALAR,JSON_SERIALIZE,JSON_TYPEOF,JSON_VALUE) JSON ...

  10. Python 基于 xlsxwriter 实现百万数据导出 excel

    追加导出 + 自动切换 sheet ️ excel 中的每个 sheet 最多只能保存 1048576 行数据 # 获取项目的根路径 rootPath curPath = os.path.abspat ...