美文网首页
剑指 Offer 39. 数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字

作者: leeehao | 来源:发表于2020-08-13 15:23 被阅读0次

    题目

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    示例 1:
    
    输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
    输出: 2
    

    限制:
    1 <= 数组长度 <= 50000

    Hash 算法

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

    投票算法

    class Solution {
        public int majorityElement(int[] nums) {
            int x = 0, votes = 0;
            for (int n : nums) {
                if (votes == 0) x = n;
                votes += (x == n) ? 1 : -1;
            }
            return x;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指 Offer 39. 数组中出现次数超过一半的数字

          本文链接:https://www.haomeiwen.com/subject/gkabdktx.html