第三大数-简单

难度:简单

题目描述:
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是 O(n)。

示例:

输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
1
2
3
4


解题思路:
1.去重排序后筛选

function thirdMax(data) {
  var arr = [...new Set(data)].sort((a, b) => b - a);
  console.log(newData);
  if (newData.length <= 3) {
    return data[0];
  } else {
    return data[2];
  }
}
1
2
3
4
5
6
7
8
9
  1. 三个数存三个值
var thirdMax = function (nums) {
  var one = nums[0];
  var two = -Infinity;
  var three = -Infinity;
  for (var i = 0; i < nums.length; i++) {
    if (nums[i] == one || nums[i] == two || nums[i] == three) continue;
    if (nums[i] > one) {
      three = two;
      two = one;
      one = nums[i];
    } else if (nums[i] > two) {
      three = two;
      two = nums[i];
    } else if (nums[i] > three) {
      three = nums[i];
    }
  }
  return nums.length >= 3 && three != -Infinity ? three : one;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
最后更新时间: 4/20/2020, 10:07:04 PM