Leetcode 229 Majority Element II

原创 2015年07月06日 21:56:26

1. 问题描述

  在一个无序的整数数组nums[](大小为n)中,找出出现次数大于n/3的所有数。即找出数字numsi的出现次数k,满足k>n/3

  

2. 方法与思路

  首先,可以通过分析得到结论:满足条件的数字个数cnt最多为2。
  证明: ifcnt>2cnt× (n/3+1 )>n 超出原数组的大小。
  然后,借鉴在数组中求出现次数超过一半的数这道题的思路:
  
  1). 第一遍扫描,设两个计数器和变量记录数组nums[]中出现频率最高的数。
  2). 第二遍扫描,计算着两个数出现的次数。
  3). 判断这两个数是否符合要求,符合则存入结果集。

class Solution {
public:
    vector<int> majorityElement(vector<int>& nums) {
        vector<int> re;

        if(nums.size() ==0) return re;
        if(nums.size() == 1) return nums;

        int i,num1,num2,cnt1=0,cnt2=0;

        //找出出现频率最高的两个数
        for(i = 0; i < nums.size(); i++)
        {
            if(cnt1 == 0 || num1 == nums[i])
            {
                num1 = nums[i];
                cnt1++;
            }
            else if(cnt2 == 0 || num2 == nums[i])
            {
                num2 = nums[i];
                cnt2++;
            }
            else
                cnt1--,cnt2--;
        }

        //统计两个数出现的次数
        cnt1 = 0; cnt2 = 0;
        for(i = 0; i < nums.size(); i++)
        {
            if(nums[i] == num1) cnt1++;
            else if(nums[i] == num2) cnt2++;
        }

        //判断是否否何要求
        if(cnt1 > nums.size()/3)
            re.push_back(num1);
        if(cnt2 > nums.size()/3)
            re.push_back(num2);

        return re;
    }
};

【LeetCode-面试算法经典-Java实现】【169-Majority Element(主元素)】

【169-Majority Element(主元素)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-Chao】原...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月23日 06:38
  • 4520

Majority Number II——算法练习

No.1-2 Majority Number II Given an array of integers, the majority number is the number that occur...
  • lxf_44944
  • lxf_44944
  • 2015年02月13日 14:46
  • 825

[LeetCode]Majority Element(献上膝盖的一题)

一、问题描述: Given an array of size n, find the majority element. The majority element is the element...
  • CristianoJason
  • CristianoJason
  • 2016年09月06日 14:45
  • 196

【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2522

买卖股票的最佳时机I II III IV

买卖股票的最佳时机I II III IV I假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。II假设有一...
  • u010669349
  • u010669349
  • 2017年12月22日 22:47
  • 34

java求解LeetCode题目,实现求解数组中的majority element

原始的题目 Given an array of size n, find the majority element. The majority element is the element ...
  • Together_CZ
  • Together_CZ
  • 2017年07月22日 09:50
  • 170

【LeetCode】169. Majority Element (多数投票算法 & 算法迁移能力)

Question1Given an array of size n, find the majority element. The majority element is the element th...
  • jiange_zh
  • jiange_zh
  • 2016年01月09日 10:41
  • 1243

LeetCode | 229. Majority Element II 限制时间空间数学原理题解析与证明

Given an integer array of size n, find all elements thatappear more than ⌊ n/3 ⌋ times. The algorith...
  • u012737193
  • u012737193
  • 2018年01月02日 13:35
  • 18

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016年11月16日 22:45
  • 2792

算法课第二周作业 | Majority Element

写在前面: 本周算法课讲解了分治算法(Divide-and-conquer algorithms),特地选了一道此类型的题目。 题意解读: 给定一个整数组,找出其中出现次数大于n/2的整...
  • zsrose
  • zsrose
  • 2017年03月05日 17:10
  • 147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 229 Majority Element II
举报原因:
原因补充:

(最多只允许输入30个字)