这道题目求第三大数,如果第三大数不存在则返回最大数,且该数字最大值不超过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;
}
}