题目

描述:给定数组中求第三大的数字;如果没有,返回最大的;时间复杂度O(n)

记得《剑指offer》才看到过这样的求第k大的题目。但是忘记具体怎么做了。只好先自己想了。

因为时间复杂度的限制,所以不能用排序,考虑声明3个空间,用于保存前三大的数字。

错误

三个空间初始化为N[0]

由于考虑不仔细,想着直接把三个空间初始化为N[0],然后从1开始遍历,发现可能直接输出第一个数字,尽管它不是第三大的。

所以应该初始化为Integer.MIN_VALUE

理解错题目

刚开始没有认真理解好题目,“如果没有”也包括像[1,2,1]这样的虽然个数有三个,但是并没有第三大的数字。如果按照原来的想法,则输入[1,1,2]会输出-2147483648。而此时应该输出最大值

解决:通过HashSet去重,得到“真正的个数”

粗心

输入[1,1,2]会输出1(应该是最大值2),尽管前面个数的判断改了,但是只有两个时候返回仍然是(nums[0]>nums[1]?nums[0]:nums[1]);

通过修改,将HashSet又重新保存回数组,再来比较:(newNums[0]>newNums[1]?newNums[0]:newNums[1]);

最终代码

public class Solution {
public int thirdMax(int[] nums) {
HashSet<Integer> integers=new HashSet<>();
for (Integer integer : nums) {
integers.add(integer);
}
int[] newNums=new int[integers.size()];
int i=0;
for (Integer integer : integers) {
newNums[i]=integer;
i++;
}
if(integers.size()==1)
return newNums[0];
else if (integers.size()==2) {
return (newNums[0]>newNums[1]?newNums[0]:newNums[1]);
}else {
//声明一个大小为3的数组,保留原数组的最大的三个,而且维护从小到大的排序
int first=Integer.MIN_VALUE,second=Integer.MIN_VALUE,third=Integer.MIN_VALUE;
for (i = 0; i < newNums.length; i++) {
int curInt = newNums[i];
if(first<curInt&&second>curInt){
first=curInt;
}else if (curInt>second&&curInt<third) {
first=second;
second=curInt;
}else if (curInt>third) {
first=second;
second=third;
third=curInt;
}
}
return first;
}
}
}

结果分析

最后只打败了20%+的java,估计还是前面HashSet去重可能用的时间有点多了。回头再想一个好一点的去重的办法!

LeetCode 第三大的数414. Third Maximum Number的更多相关文章

  1. C#LeetCode刷题之#414-第三大的数(Third Maximum Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3710 访问. 给定一个非空数组,返回此数组中第三大的数.如果不存 ...

  2. C#版 - Leetcode 414. Third Maximum Number题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  3. 【leetcode】414. Third Maximum Number

    problem 414. Third Maximum Number solution 思路:用三个变量first, second, third来分别保存第一大.第二大和第三大的数,然后遍历数组. cl ...

  4. LeetCode 414. Third Maximum Number (第三大的数)

    Given a non-empty array of integers, return the third maximum number in this array. If it does not e ...

  5. 414 Third Maximum Number 第三大的数

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

  6. LeetCode 414 Third Maximum Number

    Problem: Given a non-empty array of integers, return the third maximum number in this array. If it d ...

  7. LeetCode Array Easy 414. Third Maximum Number

    Description Given a non-empty array of integers, return the third maximum number in this array. If i ...

  8. 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...

  9. leetcode 第三大的数

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

随机推荐

  1. 基于tp5的免费开源企业官网系统

    基于tp5的免费开源企业官网系统 基本功能: 自定义菜单,单页 添加新闻文章前台展示 前台页面自动适配电脑与手机端等.后台模板用的是:AdminLTE 项目放在github上有兴趣开源下载看看 htt ...

  2. Demo01无重复数字

    package 习题集2;//有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?public class Demo1 { public static void main(S ...

  3. Shell 格式化输出printf、awk

    目录 Shell 文件的格式化与相关处理 printf.awk 格式化打印printf 案例.格式化输出文件内容 输出命令echo 案例 awk数据处理工具 语法格式 处理流程 AWK内置变量 条件 ...

  4. day07 ORM中常用字段和参数

    day07 ORM中常用字段和参数 今日内容 常用字段 关联字段 测试环境准备 查询关键字 查看ORM内部SQL语句 神奇的双下划线查询 多表查询前提准备 常用字段 字段类型 AutoField in ...

  5. day13 iptables防火墙

    day13 iptables防火墙 一.防火墙的概述 1.什么是防火墙 防止恶意流量访问的软件就叫做防火墙. 2.防火墙的种类 软件防火墙:firewalld.iptables 硬件防火墙:F5 fi ...

  6. c++ cmake及包管理工具conan简单入门

    cmake是一个跨平台的c/c++工程管理工具,可以通过cmake轻松管理我们的项目 conan是一个包管理工具,能够自动帮助我们下载及管理依赖,可以配合cmake使用 这是一个入门教程,想深入了解的 ...

  7. Learning Spark中文版--第五章--加载保存数据(1)

      开发工程师和数据科学家都会受益于本章的部分内容.工程师可能希望探索更多的输出格式,看看有没有一些适合他们下游用户的格式.数据科学家可能会更关注他们已经使用的数据格式. Motivation   我 ...

  8. Java8使用并行流(ParallelStream)注意事项

    Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率.但是如果使用不当可能会发生线程安全的问题.Demo如下: public static void co ...

  9. jquery datatable使用简单示例

    目标: 使用 jQuery Datatable 构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求.同时, jQuery Datatable 强大的功能支持:排序,分页,搜索等. Query ...

  10. 使用NSURLSessionDownloadTask实现大文件下载-监听下载进度

    - 5.1 涉及知识点(1)创建NSURLSession并设置代理,通过NSURLSessionDownloadTask并以代理的方式来完成大文件的下载 //1.创建NSURLSession,设置代理 ...