Majority Number(主元素)

问题

Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.

Notice

You may assume that the array is non-empty and the majority number always exist in the array.
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1

分析

方法1,使用一个map来存储数字出现的个数,当有一个超过长度的一半就返回。
方法2,用一个变量res来记录数字,一个变量count来计数。遍历数组,当前数字和res相等时,count++,否则count--。当count为0时,res等于当前数。
原理是每次count等于0,相当于移除了一部分元素,假定为n,其中有一半的元素都是不同的,这样就保证了剩余元素主元素还是超过一半。
我们用数学方法来演示一下。我们记主要元素的个数为a,总元素个数为b,删除了n个元素,由分析我们知道,删除的n个元素中,主要元素的个数最多为n/2(有可能更小,删除的全是其它元素),则删除后的主要元素个数为a-n/2,删除后的总元素个数为b-n,

推导

所以删除元素不会改变主要元素。

代码

方法1

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
    public int majorityNumber(ArrayList nums) {
        // wite your code
        if(nums==null||nums.isEmpty()){
            return 0;
        }
        Map map=new HashMap();
        int max=nums.size()/2;
        for(int i=0;imax){
                return temp;
            }
            map.put(temp,count);
        }
        return 0;
    }
}

方法2

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
    public int majorityNumber(ArrayList nums) {
        // wite your code
        if(nums==null||nums.isEmpty()){
            return 0;
        }
        int res=nums.get(0);
        int count=1;
        int max=nums.size()/2;
        for(int i=1;imax){
                    return res;
                }
                continue;
            }
            if(res==temp){
                count++;
            }else{
                count--;
            }
        }
        return res;
    }
}

你可能感兴趣的:(Majority Number(主元素))