leetcode414. Third Maximum Number

来源:互联网 发布:mac windows 文件系统 编辑:程序博客网 时间:2024/05/31 18:34

题目

easy程度题

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]Output: 1Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]Output: 2Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]Output: 1Explanation: Note that the third maximum here means the third maximum distinct number.Both numbers with value 2 are both considered as second maximum.
第一次做题,一个easy的题都写了一个多小时- -!
我的代码,先来个选择排序,然后,if,if,if- -
class Solution{public:    int thirdMax(vector<int>& a)    {        int n=a.size();        if(n==1)            return a[0];                if(n==2)            return a[0]>=a[1]?a[0]:a[1];                bool sorted= false;        for(int size=n;(!sorted)&&(size>1);size--)    {    sorted=true;    int indexOfMax=0;    for(int i=1;i<size;i++)    if(a[indexOfMax]<=a[i]) indexOfMax=i;    else  sorted=false;    exchange(a[indexOfMax],a[size-1]);    }                int p=0,j,result;        for(j=n-1;j>0;j--)        {                        if(a[j]>a[j-1]) ++p;            if(p==2)            {                result=a[j-1];                break;            }                        if(j==1&&p==1)            {                   result=a[n-1];                break;            }                        if(j==1&&p==0)            {                result=a[n-1];                break;            }        }                return result;    }        void exchange(int &a, int &b)    {    int temp=a;    a=b;    b=temp;    }};


高手写的代码
public class Solution  {      public int thirdMax(int[] nums)      {          long first, second, third;          first = second = third = Long.MIN_VALUE;          for (int num : nums)          {              if (num == first || num == second || num == third) continue;              if (num > first)              {                  third = second;                  second = first;                  first = num;              }              else if (num > second)              {                  third = second;                  second = num;              }              else if (num > third) third = num;          }            return (third == Long.MIN_VALUE) ? (int)first : (int)third;      }  }  

哎,还是太年轻了!
0 0