LeetCode数组-9(414)-O(n)内找到第三大的数
Posted 菜鸟更要虚心学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode数组-9(414)-O(n)内找到第三大的数相关的知识,希望对你有一定的参考价值。
思路:
从前向后遍历,用三个变量first second third 保存前三个大的数,初值设为long类型的无穷小(因为开始提交到案遇到负的临界值的情况),如果新来的数大于first则 second first依次后移并且把这歌新值赋值给first
【正确代码】
1 class Solution { 2 public int thirdMax(int[] nums) { 3 long first = nums[0], second = Long.MIN_VALUE, third = Long.MIN_VALUE; 4 if (nums.length == 1) { 5 return (int)nums[0]; 6 } 7 if (nums.length == 2) { 8 return nums[0] > nums[1] ? (int)nums[0] : (int)nums[1]; 9 } 10 int count = 0; 11 for (int i = 1; i < nums.length; i++) { 12 if (nums[i] > first) { 13 third = second; 14 second = first; 15 first = nums[i]; 16 }else if (nums[i] > second && nums[i] < first) { 17 third = second; 18 second = nums[i]; 19 }else if (nums[i] < second && nums[i] > third) { 20 third = nums[i]; 21 }else { 22 continue; 23 } 24 count++; 25 } 26 if (count < 2) { 27 return (int)first; 28 } 29 return (int)third; 30 } 31 }
有时间想想用treeset的容器做一下。
以上是关于LeetCode数组-9(414)-O(n)内找到第三大的数的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(python):第414题:第三大的数:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
Leetcode Top-K问题 BFPRT第三大的数(414)