zoukankan      html  css  js  c++  java
  • Majority Element

    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.

    题目大意:

    找出数组中超过一半的数。

    C++实现代码:

    #include<iostream>
    #include<vector>
    using namespace std;
    
    class Solution {
    public:
        int majorityElement(vector<int> &num) {
            if(num.empty())
                return -1;
            int n=num.size();
            int i;
            int index=0;
            int count=1;
            for(i=1;i<n;i++)
            {
                if(num[i]==num[index])
                {
                    count++;
                }
                else
                    count--;
                if(count<0)
                {
                    count=1;
                    index=i;
                }
            }
            return num[index];
        }
    };
    
    int main()
    {
        vector<int> num={3,3,3,3,3,3,1,2,4,5,3,45,2,54};
        Solution s;
        cout<<s.majorityElement(num)<<endl;
    }
    #include<iostream>
    #include<vector>
    using namespace std;
    
    class Solution {
    public:
        int majorityElement(vector<int> &num) {
            if(num.empty())
                return -1;
            int n=num.size();
            int major=num[0];
            int i;
            int count=1;
            for(i=1;i<n;i++)
            {
                if(num[i]==major)
                    count++;
                else
                    count--;
                if(count<0)
                {
                    count=1;
                    major=num[i];
                }
            }
            return major;
        }
    };
    
    int main()
    {
        vector<int> num={3,3,3,3,3,3,1,2,5,3,45,2,54};
        Solution s;
        cout<<s.majorityElement(num)<<endl;
    }
    

     如果要找当好出现一半的数呢?此时这个数可能是通过上面的办法找到的那个数,也可能是最后一个数,因此,只需要再次遍历数组,找出与最后一个数相等的数的个数,如果小于一半,那么上面找出的数就是刚好出现一半的数,否则最后一个数是刚好出现一半的数。

  • 相关阅读:
    待解决问题集锦
    蓝桥杯--- 历届试题 连号区间数(水题)
    蓝桥杯---历届试题 翻硬币 (水题)
    nyoj 678 最小K个数之和
    hdoj 2 括号配对问题【数组模拟实现+STL实现】
    hdoj 1016 Prime Ring Problem
    nyoj 62 笨小熊
    nyoj 47 过河问题
    nyoj 456 邮票分你一半
    nyoj 171 聪明的kk
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4179702.html
Copyright © 2011-2022 走看看