LintCode Majority Number 主元素

原创 2015年07月10日 17:24:27

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
Given an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.

样例
给出数组[1,1,1,1,2,2,2],返回 1

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

public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
     //法一:O(32n)位操作。统计32位每一位1的个数多还是0的个数多,取个数多的为该位结果值。
    public int majorityNumber(ArrayList<Integer> nums) {
        int bit = 1;
        int result = 0;
        for(int i = 0; i < 32; i++) {
            int count0 = 0;
            int count1 = 0;
            for(int j = 0; j < nums.size(); j++) {
                if((nums.get(j) & bit) == bit) {//第i位为1
                    count1++;
                }else {//第i位为0
                    count0++;
                }
            }
            if(count0 < count1){//第i位1的数目多于0的数目,则该位应为1,否则为0
                result = result ^ bit;
            }
            bit = bit<<1;
        }
        return result;
    }

    //法二: 分治法 Divide and conquer O(n)
    //保持两个标记变量。一个统计值count初始为0,一个当前值cur。遍历整个数组,用x表示当前值。
    //当count == 0时,设cur = x, count++。
    //当count != 0时,若x == cur,则count++;若x != cur,则count--。
    //最后返回cur。
    public int majorityNumber(ArrayList<Integer> nums) {
        int count = 0;
        int cur = nums.get(0);
        for(int i = 0; i < nums.size(); i++) {
            if(count == 0) {
                cur = nums.get(i);
                count = 1;
            }else {
                if(cur == nums.get(i)) {
                    count++;
                }else{
                    count--;
                }
            }
        }
        return cur;
    }
}

相关文章推荐

[LintCode] 主元素 II Majority Number II

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。注意事项 数组中只有唯一的主元素样例 给出数组[1,2,1,2,1,3,3] 返回 1挑战 要求时间复杂度为O...

主元素(LintCode)

题目来源:LintCode 原题地址:http://www.lintcode.com/zh-cn/problem/majority-number/ 题目: 给定一个整型数组,...
  • lyy_hit
  • lyy_hit
  • 2015年10月30日 15:38
  • 522

LintCode 主元素

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 您在真实的面试中是否遇到过这个题?  Yes 样例 给出数组[1,1...
  • fk5431
  • fk5431
  • 2016年05月13日 21:17
  • 733

主元素-----lintcode

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 样例 给出数组[1,1,1,1,2,2,2],返回 1 挑战 要求时间复杂度为O...
  • whhg001
  • whhg001
  • 2016年04月17日 17:35
  • 1128

主元素、主元素II、主元素III

写在前面这类题目之前还真没接触过,没什么好的思路。不过看要求又是一道考虑时间复杂度的问题,需要掂量(考虑)一下自己的算法有没有达到要求。根据自己目前的能力写出来的算法还真没做到O(n)的时间复杂度,应...

LintCode 主元素 ⅠⅡⅢ

虚心学习1 虚心学习2

Lintcode 主元素 III

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。  注意事项 数组中只有唯一的主元素 您在真实的面试中是否遇到过这个题?  Yes 样例 ...
  • Hk_john
  • Hk_john
  • 2017年04月19日 16:07
  • 259

微软实习面经

开学前罩罩突然和我说他们大组刚好要招实习生,问要不要给我内推一下,我说“这肯定的啊”,正好想找你内推呢。。。。。 然后感谢罩罩帮我修改了一下简历(主要是英文太渣。。。) 然后投了简...

Lintcode—落单的数II

落单的数II(Java)题目给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。输入:[1,1,2,3,3,3,2,2,4,1]输出:4思路:按位计算。int型数字占...

lintcode 主元素(Majority Number)(Java)

题目 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 注意事项 You may assume that the array is non-empty...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode Majority Number 主元素
举报原因:
原因补充:

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