题目地址:https://leetcode.com/problems/majority-element/
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.
题目的意思是,找到数组中出现次数大于数组长度一般的数字。
这个就用统计法就挺好,用key,value计数当前的状态。从第一个元素开始遍历,如果当前元素与key中的元素相同,那么value就加1,如果不相同,那么value就减1,如果value已经减没了,那么就该让位了,key设为当前元素值,并设value为1。
我们可以理解为一个Map的数据结构,只不过我们只有一个Entry罢了。
public class MajorityElement {
public int majorityElement(int[] nums) {
int key = nums[0];
int value = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] == key) {
value++;
} else {
if (value == 1)
key = nums[i];
else
value--;
}
}
return key;
}
}
时间复杂度为:O(n)