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.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
思路1:就是hashmap count,注意num.length ==1, return num[0];
class Solution {
public int majorityElement(int[] nums) {
HashMap<Integer, Integer> countmap = new HashMap<>();
int n = nums.length;
for(int i = 0; i < n; i++) {
countmap.put(nums[i], countmap.getOrDefault(nums[i], 0) + 1);
}
for(Integer key: countmap.keySet()) {
if(countmap.get(key) > n / 2) {
return key;
}
}
return -1;
}
}
思路2:不相同的数,相互湮灭,用count和major来维持这个最多数的定义,如果和major相同就count++,否则count--,如果count==0,则开始update最新的major;
class Solution {
public int majorityElement(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int major = nums[0]; int count = 1;
for(int i=1; i<nums.length; i++) {
if(count == 0){
major = nums[i];
count++;
} else if( nums[i] == major){
count++;
} else {
count--;
}
}
return major;
}
}