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 - Majority Number III

Given an array of integers and a number k, the majority number is the number that occurs more than 1...
  • nicaishibiantai
  • nicaishibiantai
  • 2015年02月08日 14:32
  • 3688

Lintcode 主元素 III

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

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

主元素 III 题目给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。注意事项 数组中只有唯一的主元素 说明给出数组 [3,1,2,3,2,3,3,4,4,4] ,和...
  • Tri_Color_Flag
  • Tri_Color_Flag
  • 2016年09月30日 00:57
  • 354

主元素-----lintcode

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

主元素(LintCode)

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

[LintCode]46.主元素

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 样例 给出数组[1,1,1,1,2,2,2],返回 1 思路:把这些数看做两种类型,一种主元素...
  • zwy1258432405
  • zwy1258432405
  • 2017年08月18日 11:53
  • 112

Lintcode 主元素

主元素1class Solution { public: /** * @param nums: A list of integers * @return: The majo...
  • u013174482
  • u013174482
  • 2017年07月30日 17:04
  • 94

LintCode_主元素

笔试面试算法题
  • Tina_yaoyao
  • Tina_yaoyao
  • 2015年10月28日 21:46
  • 524

代码面试题:Majority Number III

Given an array of integers and a number k, the majority number is the number that occursmore than 1/...
  • Kagura_std
  • Kagura_std
  • 2014年09月05日 02:56
  • 3742

集合框架的使用---Majority Number III

Given an array of integers and a number k, the majority number is the number that occurs more than 1...
  • zjj2015
  • zjj2015
  • 2016年01月27日 14:09
  • 145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode Majority Number 主元素
举报原因:
原因补充:

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