由于在面试作业帮、好未来侧开实习面试的时候都被问到了这道题,所以我就来写个题解吧

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

示例 1:

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

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

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

提示:

1 <= nums.length <= 104
-2 ^ 31 <= nums[i] <= 2 ^ 31 - 1

进阶:你能设计一个时间复杂度 O(n) 的解决方案吗?

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

分析此题:找第三大的数
分为两种情况:
存在第三大的数,返回第三大的数;
不存在第三大的数,返回第一大的数;不存在的情况主要是,数组长度小于等于2和数组去重元素之后长度小于等于2;

题解一:
设置max1,max2,max3为null,主要是为了好判断是否被赋值,通过遍历一次数组实现O(n)的时间复杂度。

使用Integer的原因是Integer的最大值和最小值刚好满足题目数据的要求。

 public int thirdMax(int[] nums) {Integer max1 = null, max2 = null,max3 = null;for (int i = 0 ;i < nums.length;i++){Integer cur = nums[i];if (cur.equals(max1) || cur.equals(max2) || cur.equals(max3))continue;  //遇到重复元素的情况下if (max1 == null || cur > max1){max3 = max2;max2 = max1;max1 = cur;}else if (max2 == null || cur > max2){max3 = max2;max2 = cur;}else if (max3 == null || cur > max3){max3 = cur;}}return max3 == null ? max1 : max3;}

题解二:
使用到了java中的数组排序和List集合,将数组排序后加入到list中,并且进行去重。此时就可以直接通过判断list的size进行判断是否存在第三大的数。

 public int thirdMax(int[] nums) {Arrays.sort(nums);List<Integer> ans = new ArrayList<>();for(int i:nums){if(ans.contains(i)){continue;}ans.add(i);}int n = ans.size();if(n==1 || n==2){return ans.get(n-1);}return ans.get(ans.size()-3);}

题解三:
这里使用到了Long,因为Long的最小值是-2^63 ,最大值是2^63 -1,使用Long不需要对最小值-2^31进行判断。

public int thirdMax(int[] nums) {long max1 = Long.MIN_VALUE, max2 = Long.MIN_VALUE, max3 = Long.MIN_VALUE;for (int num : nums) {if (num == max1 || num == max2 || num == max3) continue;if (num > max1) {max3 = max2;max2 = max1;max1 = num;} else if (num > max2) {max3 = max2;max2 = num;} else if (num > max3) {max3 = num;}}return (int) (max3 == Long.MIN_VALUE ? max1 : max3);}

leetcode|第三大的数java题解相关推荐

  1. leetcode热题HOT100汇总——java题解已完结撒花

    文章目录 前言 1. 两数之和 2. 两数相加 3.无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串 10. 正则表达式匹配 11. 盛最多水的容器 15. 三数之和 17. ...

  2. Java第三大的数,Java通过排序找出数组第三大数字

    Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...

  3. 【Leetcode】832. 翻转图像 Java题解

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

  4. LeetCode算法题解 414-第三大的数

    题目描述 题解: 这道题如果不看时间复杂度那是挺容易的,一个排序就解决了,但是限制到O(n)还是要点方法才能解出来的: 方法1: 如果元素的个数<=2,直接返回最大的值即可. 如果元素的个数&g ...

  5. LeetCode题库整理【Java】—— 2 两数相加

    LeetCode题库整理[Java] 2.两数相加 题目:给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果, ...

  6. LeetCode题库整理【Java】—— 1两数之和

    LeetCode题库整理[Java] 1.两数之和 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nu ...

  7. [Leetcode] 414. 第三大的数

    题目描述: 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. ...

  8. leetcode 414.第三大的数

    leetcode 414.第三大的数 题目描述 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] ...

  9. LeetCode(1.俩数之和)JAVA

    LeetCode(1.俩数之和) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是 ...

最新文章

  1. linux 共享内存函数封装,linux ftok()函数 --多进程IPC之共享内存
  2. python基本数据类型之序列类型和映射类型
  3. 【2019-05-31】生活仪式
  4. 自主定义适合自己的Keil主题
  5. Java zip 压缩 文件夹删除,移动,重命名,复制
  6. cubic-bezier_带CSS中的示例的cube-bezier()函数
  7. JSP Workshop
  8. c#获取url中的查询字符串参数
  9. HDU 3790 最短路径问题 (最短路)
  10. 【数学建模】基于matlab无线可充电传感器网络充电路线规划【含Matlab源码 750期】
  11. 笔试c语言编程题技巧,c语言笔试题答题技巧
  12. 为什么说神经网络是黑箱子模型,我刚刚有了新的感悟。
  13. Redis通信协议和集群通信算法
  14. 【Java】基础09
  15. iOS开发网络篇 一一 SDWebImage框架的基本使用
  16. Ubuntu发布移动版操作系统
  17. webpack多页面打包
  18. android系统日志如何查看,Android如何查看系统recovery日志,从而找到系统程序、刷机异常…...
  19. 自定义UITableViewCell实现类似iBooks图书列表形式
  20. MTO和Manytasking MATP MOOMFO 中G函数

热门文章

  1. Python地理可视化工具包 folium介绍
  2. 2020.8.26广联达笔试第二题——魔法师四种元素平衡(Python)
  3. SAP 电商云 Spartacus UI 代码提交的 commit 信息规范
  4. SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
  5. SAP Spartacus 捕捉 PageEvent 的方式
  6. TypeScript Type Assertions - 类型断言
  7. SAP Cloud for Customer的公有云和私有云部署方式 - Public Cloud vs Private Cloud
  8. github authentication设置里,fallback SMS number国家选项里没有中国的问题
  9. SAP Spartacus category navigation按钮之间的间隔问题
  10. SAP Spartacus central configuration - B2cStorefrontModule