LeetCode 第三大的数414. Third Maximum Number
题目
描述:给定数组中求第三大的数字;如果没有,返回最大的;时间复杂度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的更多相关文章
- C#LeetCode刷题之#414-第三大的数(Third Maximum Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3710 访问. 给定一个非空数组,返回此数组中第三大的数.如果不存 ...
- C#版 - Leetcode 414. Third Maximum Number题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- 【leetcode】414. Third Maximum Number
problem 414. Third Maximum Number solution 思路:用三个变量first, second, third来分别保存第一大.第二大和第三大的数,然后遍历数组. cl ...
- 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 ...
- 414 Third Maximum Number 第三大的数
给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n).示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: ...
- LeetCode 414 Third Maximum Number
Problem: Given a non-empty array of integers, return the third maximum number in this array. If it d ...
- 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 ...
- 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...
- leetcode 第三大的数
给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...
随机推荐
- 痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间. 在 <Cortex-M系统中断延迟及其测量方法简介> 一文里,痞子衡介绍了 Cor ...
- nextcloud搭建私有云盘
一.基础环境准备 1.安装一台centos7的linux服务器. # 系统初始化 # 如果时区不对,请修改时区 #mv /etc/localtime /etc/localtime_bak #ln -s ...
- 多人协作解决方案,git flow的使用
简介 Gitflow工作流程围绕项目发布定义了严格的分支模型. 为不同的分支分配了非常明确的角色,并且定义了使用场景和用法.除了用于功能开发的分支,它还使用独立的分支进行发布前的准备.记录以及后期维护 ...
- Docker学习(一)——安装docker
Suse12上安装docker 对于suse13.2之后的版本,因为docker已经被添加到了suse仓库中,直接使用sudo zypper install docker即可. suse12不 ...
- 【Linux】【Services】【SaaS】Spinnaker
1. 简介 1.1. 说明: Spinnaker 是 Netflix 的开源项目,是一个持续交付平台,它定位于将产品快速且持续的部署到多种云平台上.Spinnaker 通过将发布和各个云平台解耦,来将 ...
- Java Jar包压缩、解压使用
什么是jar包JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件. 如何打/解包使用jdk/bin/jar.exe工具,配置完环境 ...
- 使用Spring Data ElasticSearch框架来处理索引
/**步骤:创建工程,导入相应的包--->配置文件---->创建实体类对象------>创建接口---->测试增删改查的方法 **/ //步骤:创建工程,导入相应的包 < ...
- lucene中创建索引库
package com.hope.lucene;import org.apache.commons.io.FileUtils;import org.apache.lucene.document.Doc ...
- 全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(二)资源的获取和释放
上期的<全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(一)AQS基础>中介绍了什么是AQS,以及AQS的基本结构.有了这些概念做铺垫之后,我们就可以正 ...
- Redis持久化 aof和rdb的原理配置
目录 一.介绍 二.RDB持久化(全量写入) rdb原理 rdb模式 rdb触发情况 rdb优势和劣势 rdb文件配置 rdb命令配置 rdb数据恢复 三.AOF持久化(增量写入) aof原理 aof ...