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

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

示例 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. Spring Cloud整合Redis
  2. 2018CTDC风暴来袭乌镇 互联网大佬再续前缘
  3. R构建二次回归模型( Quadratic Regression)
  4. hdu hide handkerchief
  5. Linux中字符设备注册方式,3.4. 字符设备注册
  6. java中堆栈溢出_java – 由于堆栈溢出,C中通常会发生什么?
  7. ICCV 2021 | CMU朱俊彦团队:用一张草图轻松创建GAN模型
  8. 解析网络诊断利器SreCli-Net
  9. ssh整合之一spring的单独运行环境
  10. 利用sender的Parent获取GridView中的当前行
  11. violin 结构介绍
  12. 人生苦短 我学python之OldBoy21天入门_day01·Python基础语法
  13. 2020-12-07
  14. linux 互斥锁优先级反转,互斥锁陷阱:优先级反转、死锁
  15. 三菱FX系列PLC-编程1
  16. 维修频谱分析仪多少钱?简单告诉你,频谱分析仪维修实例报价
  17. word转PDF时,英文单词的字母间距问题
  18. CentOS官方免费下载地址,包含CentOS7和CentOS8
  19. 阿里云服务器被攻击了怎么办?
  20. 树洞程序php,微信公众平台开发(65) 微博树洞_PHP教程

热门文章

  1. python二维列表做参数_python sum函数iterable参数为二维list,start参数为“[]”该如何理解...
  2. SAP Spartacus 4.0 源代码模式下开启 SSR,为什么会从本地去加载 all.css?
  3. SAP Spartacus 的 git flow 和发布流程
  4. 使用Injection Token将字符串类型的参数注入到类的构造函数里
  5. SAP Spartacus PagelayoutComponent里的section和slot
  6. SAP Spartacus配置后台Commerce Cloud的位置
  7. How is SAP CDS metadata retrieved from GM6 frontend - text related
  8. Wordpress如何打开调试模式
  9. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
  10. 一个老程序员对自己当前编程技术处在哪个水平的反思