LeetCode Majority Element

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

题意:输出数组中出现次数大于n/2的数

思路:主要用java中的map

代码如下:

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer, Integer> hm = new HashMap<Integer, Integer>();
        int len = nums.length;

        for (int i = 0; i < len; i++)
        {
            if (hm.containsKey(nums[i]))
            {
                int val = hm.get(nums[i]);
                hm.put(nums[i], val + 1);
            }
            else
            {
                hm.put(nums[i], 1);
            }
        }

        int res = 0;
        for (Map.Entry<Integer, Integer> v : hm.entrySet())
        {
            if (v.getValue() > len / 2)
            {
                res = v.getKey();
            }
        }
        return res;
    }
}

多数投票算法,用一个变量cand表示当前候选者,另一个变量count表示计数(初始化为0),如果count=0,则count=1,cand = nums[i],否则如果nums[i] =cand,count++,否则count--

代码如下

public class Solution {
    public int majorityElement(int[] nums) {
        int count = 0;
        int cand = -1;
        int len = nums.length;

        for (int i = 0; i < len; i++)
        {
            if (count == 0)
            {
                count = 1;
                cand = nums[i];
                continue;
            }

            if (cand == nums[i]) count++;
            else count--;
        }

        return cand;
    }
}


你可能感兴趣的:(LeetCode Majority Element)