Majority Element

Majority Element


今天是一到有关数学计算的题目,较为简单,来自LeetCode,难度为Easy,Acceptance为37.5%

题目如下

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.

解题思路及代码见阅读原文

回复0000查看更多题目

解题思路

该题的思路较为简单,因为有一个数的出现次数超过了1/2,那么可以得出,其余所有的数字加起来也不到1/2

利用这个性质,我们可以遍历整个数组,然后让不同的数字相互抵消就可得到最后的结果,具体过程如下:

在遍历的过程中,用一个变量major记录出现次数最多的数字,用另一个变量count记录该数字的出现次数;当遍历每一个数字时,首先比较与major是否相同,若相同则count加一,若不同则count减一,当count减到0时,则将出现最多的数字设为major;则在遍历的最后剩下的数字即为次数最多的数字。

下面我们来看具体代码

代码如下

java版
public class Solution {
    public int majorityElement(int[] num) {

        int major=num[0], count = 1;
        for(int i=1; i<num.length;i++){
            if(count==0){
                count++;
                major=num[i];
            }else if(major==num[i]){
                count++;
            }else count--;

        }
        return major;
    }
}
c++版
int majorityElement(vector<int> &num) {
    int majorityIndex = 0;
    for (int count = 1, i = 1; i < num.size(); i++) {
        num[majorityIndex] == num[i] ? count++ : count--;
        if (count == 0) {
            majorityIndex = i;
            count = 1;
        }
    }

    return num[majorityIndex];
}

关注我
该公众号会每天推送常见面试题,包括解题思路是代码,希望对找工作的同学有所帮助

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容