LeetCode------Majority Element

来源:互联网 发布:唱歌培训软件 编辑:程序博客网 时间:2024/05/01 05:05

题目简介


Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

题目的意思是找出一个数组中出现次数超过⌊ n/2 ⌋次数的数字。

自己的解法


public class Solution {    public int majorityElement(int[] nums) {        int [] current = new int [2];        current [0] = 1;        current [1] = nums[0];        int length = nums.length;        int time = (int)Math.floor(length/2.0);        Map<Integer, Integer> map = new HashMap<Integer, Integer>();        for (int i = 0; i < length; i++){            if(map.containsKey(nums[i]) == false)            map.put(nums[i],1);            else{            int value = map.get(nums[i]);            value ++;               if(value > current[0]){               current [0] = value;               current [1] = nums[i];               }            map.put(nums[i],value);            }        }        return current[1];    }}


我的思路是先定义一个current数组,一个用来保存出现次数最多的数,一个用来保存最大次数。通过Map来管理这个数和它对应的次数,如果没有这个数就
map.put(nums[i],1);
否则就将这个数字对应的次数加1,并且将最大次数与这个次数进行比较,如果这个次数较大,则更新current数组。

Hot解法


// Sortingpublic int majorityElement1(int[] nums) {    Arrays.sort(nums);    return nums[nums.length/2];}


这个解法的思路就是排序,可能时间复杂度会高一点,但是代码量是最少的。

// Sortingpublic int majorityElement1(int[] nums) {    Arrays.sort(nums);    return nums[nums.length/2];}// Hashtable public int majorityElement2(int[] nums) {    Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();    //Hashtable<Integer, Integer> myMap = new Hashtable<Integer, Integer>();    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;}


这个解法的思路也是利用HashMap来做,这个解法比我的解法好的一点是,它直接判断次数如果大于nums.length,就直接输出它。

// Moore voting algorithmpublic int majorityElement3(int[] nums) {    int count=0, ret = 0;    for (int num: nums) {        if (count==0)            ret = num;        if (num!=ret)            count--;        else            count++;    }    return ret;}

关于Moore's voting algorithm算法,大家可以看一下这篇文章http://blog.csdn.net/chfe007/article/details/42919017














0 0
原创粉丝点击