[LeetCode] Algorithms-169. Majority Element

来源:互联网 发布:惠普网络驱动官方下载 编辑:程序博客网 时间:2024/06/06 02:02

描述

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.

思路

这道题首先把题意理解明白,要我们找大多数元素, 更明确地说就是找数组中出现次数超过数组长度一半的那个元素。而且,下面的提示说假设测试样例给出的数组中一定存在这个大多数元素,因此不用去考虑是否存在这个元素,只要找出来就可以了。

解题想法:我们可以声明两个参数 major, count.major作为所求元素的候选元素,count记录这个候选元素的出现次数(其实这个说法不对,但是可以这样理解),然后去遍历数组
如果数组元素和候选元素相同,那么count++
如果数组元素和候选元素不同,那么count–
如果count的值为0了,那么就设置当前的数组元素为新的候选元素
直到遍历结束,时间复杂度为O(n)

算法分析

因为已经知道数组中肯定有一个数组元素的出现次数大于或等于数组长度的一半,因此如果候选元素不是大多数元素,那么便利过程中一定存在一个时刻是count的值为0,然后设置新的候选元素,直到候选元素就是所求的那个元素;如果候选元素就是要找的那个大多数元素,因为大多数元素的出现次数大于或等于数组长度的一半,因此遍历过程中虽然会出现候选元素的更换,但到最后候选元素一定是要求的那个元素。

代码

class Solution {public:    int majorityElement(vector<int>& nums) {        int major = 0, count = 0;        for(int i = 0; i < nums.size(); i++) {            if(count == 0)            {                major = nums[i];                count++;            }            else {                if(major == nums[i]) count++;                else count--;            }        }        return major;    }};
原创粉丝点击