题目描述:
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-majority-element-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题分析:
题目的难点在于时间复杂度为 O(N) 、空间复杂度为 O(1) 。通过两个变量element,times,表示从左到右出现最多的元素,及其次数,不过times不是累加的,而是出现等于element的元素就+1,否则-1,若times减到等于0,则更新element。
class Solution {
public:
int majorityElement(vector<int>& nums) {
if(nums.size()==0)
return -1;
if(nums.size()==1)
return nums[0];
int element=nums[0];
int times=1;
for(int i=1; i<nums.size(); ++i){
if(element==nums[i]){
times++;
}
else if(times>=1){
times--;
}
else{
element=nums[i];
times=1;
}
}
int count=0;
for(int num : nums){
if(num==element)
count++;
}
if(count>nums.size()/2)
return element;
return -1;
}
};