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]; }