Boyer-Moore Voting算法

Leetcode

169.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.

1.暴力解法

多数投票算法

Majority Vote Algorithm,他是这样的做的:
1. 计数器count
2. 最多元素的变量majority,

  1. 第一次循环,将count值设为1,majority设置为数组的第一个元素
  2. 继续循环,如果循环的当前数组元素和majority的值相同,就将count的值++,如果不相同,就将count的值- -。
  3. 重复上述两步,直到循环完数组。
  4. 将count赋值为0,再次从头扫描数组,如果素组元素值与majority的值相同则count++,直到扫描完数组为止。如果此时count的值大于等于n/2,则返回majority的值,反之则返回-1。
public int majorityElement(int[] nums) {
       int count = 0;
       Integer majority= null;

       for (int num : nums) {
           if (count == 0) {
               majority= num;
           }
           count += (num == majority) ? 1 : -1;
       }

       return majority;
   }
}

时间复杂度:O(N)
空间复杂度:O(1)

你可能感兴趣的:(算法导论,算法研究)