数组中占比超过一半的元素称之为主要元素。 给定一个整数数组, 找到它的主要元素。 若没有, 返回 - 1。

    1. 示例 1:<br /> 输入:[1, 2, 5, 9, 5, 9, 5, 5, 5]<br /> 输出: 5
    2. 示例 2:<br /> 输入:[3, 2]<br /> 输出: - 1
    3. 示例 3:<br /> 输入:[2, 2, 1, 1, 1, 2, 2]<br /> 输出: 2

    第一次写法(堆栈溢出,错误)

    var majorityElement = function (nums) {
          let arr = [],
              num = 0,
              max = 0;
          nums.forEach(val => {
            arr.push(nums.filter(val2 => val === val2))
          })
    
          for (let i = 0; i < arr.length; i++) {
            if(arr[i].length>max){
              max = arr[i].length
              num = arr[i][0]
            }
          }
    
          if(max>nums.length/2){
            return num
          }else{
            return -1
          }
     };
    

    看完题解后,发现可以使用es6新的Map数据结构储存
    通过map可以储存

    var majorityElement = function (nums) {
          let map = new Map(),
              max = -Infinity,
              len = nums.length/2;
    
          for (let i = 0; i < nums.length; i++) {
            const curr = nums[i];
            map.set(curr,map.has(curr)?map.get(curr) + 1 : 1)
            max = Math.max(max,map.get(curr))
            if(max>len){
                return curr
            }
          }
    
          return -1
     };