solution_169

来源:互联网 发布:linux find grep命令 编辑:程序博客网 时间:2024/06/05 08:22

LeetCode Problem 169 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.

Solution

This problem can be solved with the Boyer-Moore talgorithm. For instance, the following image will illustrate the algorithm.

image

We can see that if the major element is not the same as the current element, then the amount of the major element decreases 1. If the amount becomes zero and it meets another element, the major element will change to the current element and repeats the steps.

Here is the code:

#include <iostream>#include <string>#include <vector>using namespace std;class Solution {    public:        int majorityElement(vector<int> & nums);};int Solution::majorityElement(vector<int> & nums) {    //Boyer-Moore algorithm    int major = nums[0], count = 1;    for (int i = 1; i < nums.size(); i++){        if (count == 0) {            major = nums[i];            count = 1;        }        else if (major == nums[i]) {            count++;        }        else {            count--;        }    }    return major;}

As we can see, every time that the element of the vector is not equal to the current major element then the count of the current element decreases 1. If the current count become 0 and we meet another different element, we should change the major element. Repeat the steps and we can get the last element as the major element.