• 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去重可能用的时间有点多了。回头再想一个好一点的去重的办法!

  • 相关阅读:
    Flutter移动电商实战 --(40)路由_Fluro的全局注入和使用方法
    Flutter移动电商实战 --(39)路由_Fluro的路由配置和静态化
    Flutter移动电商实战 --(38)路由_Fluro中Handler编写方法
    Flutter移动电商实战 --(37)路由_Fluro引入和商品详细页建立
    网络基础:NetBIOS
    linux 定时任务
    linux useradd 命令基本用法
    Git undo 操作
    Git 查看文件的历史
    Ubuntu14.04安装postgresql9.4
  • 原文地址:https://www.cnblogs.com/FannyChung/p/6545375.html
Copyright © 2020-2023  润新知