Three passes track each ignore first two and return. Use long long to bypass int boundary problems.

```
int thirdMax(vector<int> nums) {
long long fmax = LLONG_MIN, smax = LLONG_MIN, tmax = LLONG_MIN;
for (int x : nums) fmax = std::max<long long>(fmax, x);
for (int y : nums) if (y != fmax) smax = std::max<long long>(smax, y);
for (int z : nums) if (z != smax && z != fmax) tmax = std::max<long long>(tmax, z);
return (tmax == LLONG_MIN) ? fmax : tmax;
}
```