Description:
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.
问题描述
给一个大小为n的数组,找出里面的”majority element”,这个”majority element”我不好翻译。但”majority element”的特性是在这个数组中出现超过 ⌊ n/2 ⌋次的元素,并且假定数组非空,而且”majority element”一定存在。
Ex:
[1 2 3 1 1] 这里的majority element为1
解法一:
思路:
这个问题本质上是一个数学问题(这个问题的解法是一位数学家解决的),基于majority element出现的次数超过 ⌊ n/2 ⌋。所以设置计数变量count,初始值为1,major为第一个元素。然后逐个遍历接下来的元素,如果与major相等,count++。如果不相等count–。如果count=0了,给count+1,然后更改major元素。由于majority element的特性,遍历完整个数组后,major的值即为”majority element”.。
Code:
public class Solution {
public int majorityElement(int[] nums) {
int major = nums[0], count = 1;
for(int i = 1; i<nums.length; i++){
if(count == 0){
count++;
major = nums[i];
}
else if(major == nums[i]){
count++;
}
else{
count--;
}
}
return major;
}
}