题目描述
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
样例1
输入: [1, 1, 1, 1, 2, 2, 2]
输出: 1
样例2
输入: [1, 1, 1, 2, 2, 2, 2]
输出: 2
java题解
用一个count变量来计数,和一个val来记录当前major数,每当count == 0时就更新val值,同样本方法同样可以用于数据流的情况,实时输出major数
public class Solution {
public int majorityNumber(List<Integer> nums) {
if (nums == null || nums.size() == 0){
return -1;
}
int val = nums.get(0);
int count = 1;
for (int i = 1; i < nums.size(); i++){
count += nums.get(i) == val ? 1 : -1;
if (count == 0){
val = nums.get(i);
count++;
}
}
count = 0;
for (int n : nums){
if (n == val){
count++;
}
}
return count > nums.size() / 2 ? val : -1;
}
}
C++题解
使用count计数,相同++不同–。
主要思想是:因为众数超过总数的一半,所以不会被减到0以下。
class Solution {
public:
int majorityNumber(vector<int> &nums) {
// write your code here
if (nums.size() == 0) {
return -1;
}
int count = 0;
int major = nums[0];
for (int i = 0; i < nums.size(); i++) {
if (major == nums[i]) {
count++;
} else {
count--;
}
if (count == 0) {
major = nums[i];
count++;
}
}
count = 0;
for (int i = 0; i < nums.size(); i++) {
if (major == nums[i]) {
count++;
}
}
if (count > nums.size() / 2) {
return major;
}
return -1;
}
};
python题解
class Solution:
def majorityNumber(self, nums):
storedNumber = None
counter = 1
for num in nums:
if num == storedNumber:
counter += 1
else:
counter -= 1
if counter == 0:
storedNumber = num
counter = 1
return storedNumber