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/2次的数~可以把数组排序,然后数组中间的数就是我们需要的数,这种解法时间复杂度为O(nlogn)~
class Solution:
# @param num, a list of integers
# @return an integer
def majorityElement(self, num):
num.sort()
return num[len(num)/2]
还有一种解法,如下~
Runtime: O(n) — Moore voting algorithm: We maintain a current candidate and a counter initialized to 0. As we iterate the array, we look at the current element x:
If the counter is 0, we set the current candidate to x and the counter to 1
If the counter is not 0, we increment or decrement the counter based on whether x is the current candidate.
After one pass, the current candidate is the majority element. Runtime complexity = O(n).
class Solution:
# @param num, a list of integers
# @return an integer
def majorityElement(self, num):
count = 0
for i in xrange(len(num)):
if count == 0:
candidate = num[i]; count = 1
else:
count = count + 1 if num[i] == candidate else count - 1
return candidate