题目描述
思路一
排序:将数组从大到小排序后,从头开始遍历数组,通过判断相邻元素是否不同,来统计不同元素的个数。如果能找到三个不同的元素,就返回第三大的元素,否则返回最大的元素。
后面加个去重也可以
// 排序public int thirdMax(int[] nums) {Arrays.sort(nums);reverse(nums);for (int i = 1, diff = 1; i < nums.length; i++) {if (nums[i] != nums[i - 1] && ++ diff == 3) {return nums[i];}}return nums[0];}private void reverse(int[] nums) {int left = 0;int right = nums.length - 1;while (left < right) {nums[left] ^= nums[right];nums[right] ^= nums[left];nums[left] ^= nums[right];left++;right--;}}
思路二

可以使用 treeSet 的特性
public int thirdMax(int[] nums) {TreeSet<Integer> s = new TreeSet<Integer>();for (int num : nums) {s.add(num);if (s.size() > 3) {s.remove(s.first());}}return s.size() == 3 ? s.first() : s.last();}

