Skip to content

Latest commit

 

History

History
59 lines (47 loc) · 1.34 KB

File metadata and controls

59 lines (47 loc) · 1.34 KB

##Majority Number

Given an array of integers,
the majority number is the number that occurs more than half of the size of the array. Find it.

Have you met this question in a real interview? Yes
Example
Given [1, 1, 1, 1, 2, 2, 2], return 1

####Challenge O(n) time and O(1) extra space

####Tags Expand Greedy Enumeration LintCode Copyright Zenefits

####思路

  • 来自于一篇论文
  • 消除法
  • 先找到,然后测试,看到底是不是,因为可能出现并没有majoritynumber的情况
  • 当然 也可以排序, 找中间的值,也能实现
public class Solution {
    /**
     * @param nums: a list of integers
     * @return: find a  majority number
     */
    public int majorityNumber(ArrayList<Integer> nums) {
        // write your code
        int size = nums.size();
        int count = 1;
        int candidate = nums.get(0);

        for (int i = 1; i < size; i++) {
            if (candidate == nums.get(i)) {
                count++;
            } else {
                count--;
            }

            if (count == 0) {
                candidate = nums.get(i);
                count = 1;
            }
        }

        count = 0;
        for (int i = 0; i < size; i++) {
            if (nums.get(i) == candidate) {
                count++;
            }
        }

        return count > size / 2 ? candidate : -1;

    }
}