Leetcode169 Majority Element

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • 各校历年复试机试试题 清华、北大、华科试题详细笔记部分,少笔记部分与少数leetcode【含个人整理笔记】 一、详...
    十里江城阅读 1,223评论 0 1
  • 忽明忽灭 灯火摇曳 回忆被时间撕裂 十年瞬息 在黎明之前 等待下个章节 ...
    尹小寒阅读 300评论 0 2
  • 深圳,来来回回,第十三次了。 我说,我喜欢深圳,但是我不知道深圳喜不喜欢我。暂且称他为橙子吧,橙子告诉我,深圳喜欢...
    半简开阅读 224评论 0 0