题目如下:
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.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Solution {
public static int majorityElement(int[] nums) {
//使用map集合用来装载数组中出现的数,key为数组中出现的值,value为出现的次数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0;i < nums.length;i++){
//判断数组中是否已经存在,若已经存在,value加1,若不存在,存入map集合
if(map.containsKey(nums[i])){
int value = map.get(nums[i]);
map.put(nums[i], value+1);
}else{
map.put(nums[i], 1);
}
}
int[] sort = new int[map.size()];
//获得所有的value
Collection<Integer> cc = map.values();
Iterator iterator = cc.iterator();
//把value存入数组中
List<Integer> sssIntegers = new ArrayList<Integer>();
while(iterator.hasNext()){
sssIntegers.add((Integer) iterator.next());
}
for(int i = 0 ;i < sssIntegers.size();i++){
sort[i] =sssIntegers.get(i);
}
//对value值建立的数组进行排序,得到最大的value值
Arrays.sort(sort);
int num = sort[map.size()-1];
//通过value值查找key值,因为值需要大于数据的一半,所以只会存在一个value对应一个key的情况
if(num > nums.length/2){
Set<Integer> set = map.keySet();
for(Integer set1: set){
if(num==map.get(set1)){
return set1;
}
}
}
return 0;
}
public static void main(String[] args){
int[] nums = {3,2,3,4,5,3,2,3,2,34,3,5,3,3,3};
int num = majorityElement(nums);
System.out.println(num);
}
}
所使用时间为463ms.
TreeMap 是一个实现自动排序的map集合,通过key进行自动排序。
Map集合常用方法:
containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
keySet() 返回此映射中包含的键的 Set 视图。
putAll(Map