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.
语言:java
1常规思路:
1.1 建立TreeMap,计算出每个元素的出现频次
1.2 统计出现次数最多的,达到要求(n/2)就返回
缺点:大家都能想到的,效率固然不高。
代码如下:
public int majorityElement(int[] nums) {
TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
for(int i=0;i<nums.length;i++)
{
if(map.containsKey(nums[i]))
{
int curCount = map.get(nums[i]);
map.remove(nums[i]);
map.put(nums[i], (curCount+1));
}
else
map.put(nums[i], 1);
}
for(Map.Entry<Integer,Integer> entry : map.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
if(value>nums.length/2)
return key;
}
return 0;
}
思路2
1 对数组进行排序
2 不管主要元素起点在开头、中间任意位置,索引为n/2的元素一定为主要元素(像是脑筋急转弯)
代码如下:
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}