题目简介
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];
}
}
map.put(nums[i],1);
否则就将这个数字对应的次数加1,并且将最大次数与这个次数进行比较,如果这个次数较大,则更新current数组。
Hot解法
// Sorting
public int majorityElement1(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}
// Sorting
public 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 algorithm
public 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;
}