摩尔投票法-数组中出现次数超过一半的数字

在这里插入图片描述

方法一

摩尔投票法

用x记录当前众数,遍历数组,当前数字等于众数时vote加一,否则减一。当vote是0时更换众数。

    public int majorityElement(int[] nums) {
    
    
        int x = nums[0];
        int vote = 0;
        for(int k:nums){
    
    
            if(vote == 0) x = k;
            if(k == x){
    
    
                vote++;
            }else{
    
    
                vote--;
            }
        }
        return x;
        }
}

方法二

哈希表存储遍历
    public int majorityElement(int[] nums) {
    
    
        Map<Integer,Integer> map = new HashMap<>();
        for(int i:nums){
    
    
            if(map.containsKey(i)){
    
    
                map.put(i,map.get(i)+1);
            }else{
    
    
                map.put(i,1);
            }
        }
        int max = 0,result = 0;
        for(Integer key:map.keySet()){
    
    
            if(map.get(key)>max){
    
    
                max = map.get(key);
                result = key;
            }
        }
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43812609/article/details/108642627