给定一个非空数组,返回此数组中第三大的数。 如果不存在,则返回数组中最大的数。 复制代码
示例:
输入: [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)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高效能程序员的修炼
[美]Jeff Atwood / 陆其明、张健 / 人民邮电出版社 / 2013-7 / 49
jeff atwood于2004年创办coding horror博客(http://www.codinghorror.com),记录其在软件开发经历中的所思所想、点点滴滴。时至今日,该博客每天都有近10万人次的访问量,读者纷纷参与评论,各种观点与智慧在那里不断激情碰撞。 《高效能程序员的修炼》是coding horror博客中精华文章的集合。全书分为12章,涉及迈入职业门槛、高效能编程、应聘......一起来看看 《高效能程序员的修炼》 这本书的介绍吧!