Lintcode 166. 主元素

-----------------------------------

Moore‘s voting algorithm算法:从一个集合中找出出现次数半数以上的元素,每次从集合中去掉一对不同的数,当剩下一个元素的时候(事实上只要满足一个元素出现过半就一定会剩下一个元素的)这个元素就是我们要找的数了。

AC代码:

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
    public int majorityNumber(ArrayList<Integer> nums) {
        int e, count;
        e=count=0;
        for(int i=0;i<nums.size();i++){
            if(count==0){
                e=nums.get(i);
                count++;
            }else{
                if(e==nums.get(i)){
                    count++;
                }else{
                    count--;
                }
            }
        }
        return e;
    }
}

题目来源: http://www.lintcode.com/zh-cn/problem/majority-number/

参考资料: http://blog.csdn.net/chfe007/article/details/42919017

时间: 2024-10-13 23:26:02

Lintcode 166. 主元素的相关文章

lintcode.46 主元素

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一. 注意事项 You may assume that the array is non-empty and the majority number always exist in the array. 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Apple Epic Systems TinyCo Ye

lintcode 主元素解决方法

原题 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一. 样例 给出数组[1,1,1,1,2,2,2],返回 1 主要思路 在不考虑时间复杂度的情况下,用for循环从第一个数开始与后面的数依次比较最后返回结果.代码如下: class Solution { public: /** * @param nums: A list of integers * @return: The majority number */ int majorityNumber(vector<

lintcode 主元素:majority number III主元素III

题目 主元素 III 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k. 样例 给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3 注意 数组中只有唯一的主元素 挑战 要求时间复杂度为O(n),空间复杂度为O(k) 解题 上一题刚介绍过所用的方法,但是这个确实很复杂的 先利用HashMap实现 public class Solution { /** * @param nums: A list of integers * @param k

[LintCode] Majority Number(以时间复杂度O(n)求主元素)

一个数据序列的主元素,是指序列中出现次数超过序列长度一半的元素. 法1(期望时间复杂度为O(n)): 由于主元素出现次数超过序列长度的一半,因此,主元素一定是中位数.可以利用递归划分求中位数的方法,期望时间复杂度为O(n). 法2: 显然,如果一个序列存在主元素,那么我们去掉序列中不同的两个数,剩下序列的主元素和原序列的主元素相同. 具体算法操作:记录两个量,当前元素x,计数cnt.初始化cnt为0:然后遍历序列,若cnt为0,则将x设为当前元素并将cnt置为1,否则,若当前元素和x相同,那么c

[容易]主元素

题目来源:http://www.lintcode.com/zh-cn/problem/majority-number/ 这道题注意题意,给出的数组一定是存在这个主元素的,不能给一个没有主元素的数组测试. 方法1:穷举法 使用两个for循环计算出每个元素出现的次数, 如果该元素出现次数大于数组元素的二分之一立即返回该元素. 可以accept的程序如下: 1 class Solution { 2 public: 3 /** 4 * @param nums: A list of integers 5

主元素 II

主元素 II 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一. 样例 给出数组[1,2,1,2,1,3,3] 返回 1 注意 数组中只有唯一的主元素 挑战 要求时间复杂度为O(n),空间复杂度为O(1). 嗯.. 百度了一下. 主元素可能有两个,于是设置两个当前主元素.遍历nums,如果和某个当前住元素相等,则计数加一.如果都不相等 计数减一,若减后计数小于等于0,则将对应的当前住元素更换. 最后需要验证,应为当前主元素只有一个,候选有两个. lintcode上

Majority Element:主元素

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. 求主元素:包含n个元素的数组中,如果一个元素的出现次数大

求数组主元素的递归算法

数组A是具有n个元素的数组,x是A中的一个元素,若A中有一半以上的元素与A相同,则称x是数组A的主元素.例如 ,数组A={1,3,2,3,3,4,3},元素3就是该数组的主元素. 1.移去数组中的两个不同元素后,如果原来数组中有主元素,那么该主元素依然是新数组的主元素. 2.如果数组2k个元素中有k个元素相同(k<n/2),移去这2k个元素以后,如果原来数组中有主元素,那么该主元素依然是新数组的主元素. 如果新数组只剩下一个元素,该元素可作为主元素的候选者.新数组是若干个相同元素,该元素可作为主

主元素问题 减治法

一个有n个元素的序列A中,出现次数大于n/2的元素称为主元素.现给定一个序列(保证存在主元素),求其主元素. 一种思路是Boyer和Moore提出的减治法,可以在线性时间内求得主元素.如果不确定序列是否存在主元素,还需要再加一个线性的判断. 以下假设A的主元素存在,且出现了k次,则其他元素出现的次数为n - k,二者的差记为c = 2k-n.可知x为主元素当且仅当 c > 0. 考查序列A的长度为2m的前缀P,若其中某个元素 x 出现的次数达到m,则此时可减而治之,分析如下,参考了数据结构课本的