【leetcode】袁厨每日精选题详解之要找我家老三?

  嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解,并且每周会整理一下该周刷的所有题目,及解题框架。大家微信搜索【程序员爱做饭】关注我吧!



题目描述

在这里插入图片描述


三个变量法

在这里插入图片描述


做题思路

遇到这个题目的第一想法就是定义三个变量,分别保存最大值最小值中间值,以为是个很简单的题目,但是呢,我低估他了,一个恶心的样例整的我很难受,我的想法就是遍历数组,然后遇到更大的值的时候,则先将中间的赋给最小,最大的赋给第二,新值赋给最大。目前看还是不难的,但是呢?你应该怎么给三个变量赋初值呢?Integer.MIN_VALUE?这样是不行的,看下面的代码告诉你会遇到什么情况。

在这里插入图片描述

众所周知,Integer.MIN_VALUE的值为-2147483648,所以当测试用例中有相同值时,则会产生第三大的值仍为-2147483648,则仍不知道第三大的值存不存在。所以我们需要以下方法

题目代码

class Solution {
    
    
    public int thirdMax(int[] nums) {
    
    
      //赋初值为long型,和int是可以相互转化的
      long first = Long.MIN_VALUE;
      long  second = Long.MIN_VALUE;
      long third = Long.MIN_VALUE;  
      for(int x : nums){
    
    
          if(x > first){
    
    
             //先换第三个,不可以先换第一个
              third = second;
              second = first;             
              first = x;              
          }else if(x > second && x < first){
    
    
              third = second;
              second = x;            
          }else if(x > third && x < second){
    
    
              third = x;                                         
          }
      }   
      //判断第三个的值有没有发生改变,然后输出int型     
     return third == Long.MIN_VALUE ? (int)first :(int)third;
 }
}


总结

这个题目的通过率低是有道理滴,真的是个不错的题目,大家可以好好打一下。

更多题目总结请扫描下面二维码,一块刷题呀。

在这里插入图片描述

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/tan45du_yuan/article/details/109125133
今日推荐