主元素 II

来源:互联网 发布:windows ce 触摸屏 编辑:程序博客网 时间:2024/06/07 20:26

主元素 II 

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。


 注意事项

数组中只有唯一的主元素

样例

给出数组[1,2,1,2,1,3,3] 返回 1

挑战 

要求时间复杂度为O(n),空间复杂度为O(1)。

标签 

相关题目 

思路:这道题和上一道题思路基本一样,也是用抵消的方法,不过这个只保证主元素多于总元素的三分之一,而在一个数组中任意一个数出现次数大于n/3总数最多有两个,所以用抵消的方法找出两个最多的,再遍历一遍找出谁是主元素即可(其他大于主元素的k分之一方法都一样)

class Solution {public:    /*     * @param nums: a list of integers     * @return: The majority number that occurs more than 1/3     */    int majorityNumber(vector<int> &nums) {        // write your code here        int can1=0,can2=0,num1=0,num2=0;//找两个次数最多的数        for(auto n:nums)        {            if(num1==0)            {                can1=n;                num1++;            }            else if(can1==n)//一定紧跟(num==0)后,保证刚开始相同的数在一个里            num1++;            else if(num2==0)            {            can2=n;            num2++;            }            else if(can2==n)            num2++;            else            {num1--,num2--;            }        }        num1=num2=0;        for(auto n:nums)//第二次遍历        {            if(n==can1)            num1++;            else if(n==can2)            num2++;        }        return num1>num2? can1:can2;            }};

主元素 II 

Accepted

总耗时: 574 ms
100% 数据通过测试.
还没解决的相关题目
    42. 最大子数组 II45. 最大子数组差78. 最长公共前缀150. 买卖股票的最佳时机 II149. 买卖股票的最佳时机
太牛了,把AC的喜悦分享给你的朋友吧!
2


原创粉丝点击