给定一个非空数组,返回此数组中第三大的数。 如果不存在,则返回数组中最大的数。 复制代码
示例:
输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。 复制代码
思考:
定义三个Integer对象max1,max2,max3来记录前三大的数,默认为null。 遍历数组,进行比较。 如果max1为空或者当前元素大于max1,说明当前元素是最大元素,则将原先的max2赋值给max3.max1赋给max2,当前元素赋给max1。 如果max1不为空且当前元素不大于max1,再比较,如果max2为空或者当前元素大于max2小于max1,说明当前元素是第二大元素。 所以将原max2赋给max3,当前元素赋值给max2。 如果max2不为空且当前元素不大于max2小于max1,再比较,如果max3为空或者当前元素大于max3小于max2(这里要先判断下max2不为空,防止出现重复元素时报错),就将当前元素赋值给max3。 最后判断max3是否为null,不为null返回max3,null则返回max1。 复制代码
实现:
class Solution {
public int thirdMax(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
Integer max1 = null;
Integer max2 = null;
Integer max3 = null;
for (int count = 0; count < nums.length; count++) {
if (max1 == null || (nums[count] > max1)) {
max3 = max2;
max2 = max1;
max1 = nums[count];
} else if ((max2 == null || nums[count] > max2) && nums[count] < max1) {
max3 = max2;
max2 = nums[count];
} else if ((max3 == null || nums[count] > max3) && max2 != null && nums[count] < max2) {
max3 = nums[count];
}
}
return max3 != null ? max3 : max1;
}
}复制代码
以上所述就是小编给大家介绍的《LeetCode每日一题:第三大的数(No.414)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代小数据分析
屈泽中 / 电子工业出版社 / 2015-7-1 / 69.00元
《大数据时代小数据分析》是一本大数据时代下进行小数据分析的入门级教材,通过数据分析的知识点,将各类分析工具进行串联和对比,例如:在进行线性规划的时候可以选择使用Excel或LINGO或Crystal Ball。工具的应用难易结合,让读者循序渐进地学习相关工具。JMP和Mintab用来分析数据,分析的结果使用Excel、LINGO、Crystal Ball来建立数据模型,最后使用Xcelsius来动......一起来看看 《大数据时代小数据分析》 这本书的介绍吧!