Leetcode169 Majority Element

2018-07-20  本文已影响0人  泡泡爱上巧克力_7122

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

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

示例 1:

输入:[3,2,3]

输出:3

示例 2:

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

输出:2


Solution 1

常规解法,利用hashmap,当map中没有这个值时,放入map,并设value为1,有时,将值加一放入

class Solution { 

 public int majorityElement(int[] nums) {

        Map<Integer,Integer> myMap = new HashMap();

        int ret=0;

        for (int num: nums) {

                if (!myMap.containsKey(num))

                        myMap.put(num, 1);

                else

                    myMap.put(num, myMap.get(num)+1);

                if (myMap.get(num)>nums.length/2) {   

                    ret = num;

                    break;

                }

        }

        return ret;   

     }

}

O(n)时间,O(n)空间


Solution2

摩尔投票法,前提是它所找的数组中必定有众数

可以参考这个动画链接摩尔投票动画 

public class Solution {

    public int majorityElement(int[] num) {

        int major=num[0], count = 1;

        for(int i=0;i<num.length;i++){

            if(count==0){

                major = num[i];

                count=1;

            }else if(major==num[i]){

                count++;

            }else{

                count--;

            }

     }

    return major;

}

}

O(n)时间 O(1)空间

上一篇下一篇

猜你喜欢

热点阅读