求众数

Posted by Kaka Blog on August 16, 2018

题目链接

题目

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例1:

输入: [3,2,3]
输出: 3

示例2:

输入: [2,2,1,1,1,2,2]
输出: 2

答案分析

借助Map记录数值出现的次数,使用了额外的空间。

我的答案:

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int n : nums) {
            map.put(n, map.getOrDefault(n, 0) + 1);
            if (map.get(n) > nums.length/2)
                return n;
        }
        return 0;
    }
}

别人的答案:

不需要使用额外空间。

class Solution {
  public int majorityElement(int[] nums) {
    int result = nums[0], count = 0;
    for (int num : nums) {
      if (count == 0) {
        result = num;
        count++;
      } else {
        if (result == num) {
          count++;
        } else {
          count--;
        }
      }
    }
    return result;
  }
}