문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 nums가 주어졌을 때, 배열에서 서로 다른 숫자 중 세 번째로 큰 숫자를 반환해라. 세 번째로 큰 숫자가 존재하지 않으면, 배열에서 가장 큰 숫자를 반환해라.
#1
Input: nums = [3, 2, 1]
Output: 1
Explanation:
첫 번째 뚜렷한 최댓값은 3이다.
두 번째 뚜렷한 최댓값은 2이다.
세 번째 뚜렷한 최댓값은 1이다.
#2
Input: nums = [1, 2]
Output: 2
Explanation:
첫 번째 뚜렷한 최댓값은 2이다.
두 번째 뚜렷한 최댓값은 1이다.
세 번째 뚜렷한 최댓값은 존재하지 않아서, 최댓값 2를 대신 반환한다.
#3
Input: nums = [2, 2, 3, 1]
Output: 1
Explanation:
첫 번째 뚜렷한 최댓값은 3이다.
두 번째 뚜렷한 최댓값은 2이다(두 개의 2는 값이 같으므로 함께 센다).
세 번째 뚜렷한 최댓값은 1이다.
class Solution {
public int thirdMax(int[] nums) {
long max = Long.MIN_VALUE;
long secoundMax = Long.MIN_VALUE;
long thirdMax = Long.MIN_VALUE;
for(int x : nums){
if(x > max){
thirdMax = secoundMax;
secoundMax = max;
max = x;
}else if(x > secoundMax && max != x){
thirdMax = secoundMax;
secoundMax = x;
}else if(x > thirdMax && secoundMax != x && max != x){
thirdMax = x;
}
}
if(thirdMax != Long.MIN_VALUE)
return (int)thirdMax;
else
return (int) max;
}
}