美文网首页
Leetcode169 Majority Element

Leetcode169 Majority Element

作者: 泡泡爱上巧克力_7122 | 来源:发表于2018-07-20 16:16 被阅读0次

    给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ 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)空间

    相关文章

      网友评论

          本文标题:Leetcode169 Majority Element

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