本文主要是介绍leetcode414-Third Maximum Number,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题目求第三大数,如果第三大数不存在则返回最大数,且该数字最大值不超过2^31-1。从这个提示上就可以看出这个数字是用int类型表示的。我们当然可以通过排序的方式先给数组排序然后很容易的就能求解。但是有没有什么更好的办法呢?对于数组来说考点无非就是遍历,我们遍历数组,分别记录最大值,第二大值,第三大值,每遍历一个数字更新这三个值,这里这三个值的初始化比较讲究,我们应该是要初始化成最小值才可以,比 int还要小那只能考虑long类型了
public class thirdMaximumNumber {public static void main(String[] args) {int[] arr = {2,2,3,1};System.out.println(getThird(arr));}public static int getThird(int[] nums) {Long first = Long.MIN_VALUE;Long second = Long.MIN_VALUE;Long third = Long.MIN_VALUE;for(int i = 0;i<nums.length;i++) {if(nums[i] > first) {third = second;second = first;first = (long) nums[i];} else if(nums[i] < first && nums[i] > second) {//这里之所以nums[i] < first的目的是为了解决掉nums[i] = first的这种情况,因为题目中说了这种重复的元素不算third = second;second = (long) nums[i];} else if(nums[i] < second && nums[i] > third) {third = (long) nums[i];}}long res = third == Long.MIN_VALUE ? first : third;return (int) res;}
}
这篇关于leetcode414-Third Maximum Number的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!