ZhongKuo0228 / study

0 stars 0 forks source link

169. Majority Element #21

Open fockspaces opened 1 year ago

fockspaces commented 1 year ago

Given an array nums of size n, return the majority element.

The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.

Example 1:

Input: nums = [3,2,3] Output: 3 Example 2:

Input: nums = [2,2,1,1,1,2,2] Output: 2

Constraints:

n == nums.length 1 <= n <= 5 * 104 -109 <= nums[i] <= 109

Follow-up: Could you solve the problem in linear time and in O(1) space?

fockspaces commented 1 year ago

摩爾投票法,當目前最大黨票數被其他黨合計抵銷時,當前黨變為最大黨

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int majority = nums[0], count = 1;
        for(int i = 1; i < nums.size(); i++) {
            if(nums[i] != majority) count--;
            else count++;
            if(count < 0) {majority = nums[i]; count = 1;}
        }
        return majority;
    }
};