47.Majority number II-主元素 II(中等题)

来源:互联网 发布:淘宝发布加盟招商信息 编辑:程序博客网 时间:2024/05/21 06:42

主元素 II

  1. 题目

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

    注意事项
    数组中只有唯一的主元素

  2. 样例

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

  3. 挑战

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

  4. 题解

思路和46.Majority Number-主元素(容易题)的一致,如果发现3个不一样的数就进行消掉。记录两个candidate和每个candidate分别的出现次数。如果遍历到的数和两个candidate都不等,就将其对应的count都减1。最后将两个candidate再遍历一次验证一下谁出现的次数多谁就是主元素。

public class Solution{    /**     * @param nums:     *            A list of integers     * @return: The majority number that occurs more than 1/3     */    public int majorityNumber(ArrayList<Integer> nums)    {        int candidate1 = 0, candidate2 = 0;        int count1 = 0, count2 = 0;        for (int i = 0; i < nums.size(); i++)        {            if (candidate1 == nums.get(i) || count1 == 0)            {                count1++;                candidate1 = nums.get(i);            }            else if (candidate2 == nums.get(i) || count2 == 0)            {                count2++;                candidate2 = nums.get(i);            }            else            {                count1--;                count2--;            }        }        count1 = 0;        count2 = 0;        for (int j = 0; j < nums.size(); j++)        {            count1 += (candidate1 == nums.get(j)) ? 1 : 0;            count2 += (candidate2 == nums.get(j)) ? 1 : 0;        }        return count1 > count2 ? candidate1 : candidate2;    }}

Last Update 2016.9.30

0 0