题目
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: 1 Explanation: The third maximum is 1.
Example 2:
Input: [1, 2] Output: 2 Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: [2, 2, 3, 1] Output: 1 Explanation: 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; } }
哎,还是太年轻了!