描述:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于
⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路:
这道题有很多种方法求解:
这里提供两个方法:
- 利用散列表,进行计数,即<数字,出现次数>,最后遍历散列表,找出出现次数大于n/2的元素。
- 消除法,每次遇到两个不同的数字,则将这两个数字从数组中删除。这样最后剩下的元素,一定是出现次数最多的元素。
java(方法一)
import java.util.HashMap; import java.util.Map; class Solution { public int majorityElement(int[] nums) { double n = Math.ceil(nums.length / 2.0); Map<Integer, Integer> dict = new HashMap<>(10); for (int num : nums) { if (dict.get(num) == null) { dict.put(num, 1); } else { dict.put(num, dict.get(num) + 1); } } for (Integer key : dict.keySet()) { if (dict.get(key) >= n) { return key; } } return -1; } }
结果:
python3(方法二)
class Solution: def majorityElement(self, nums: List[int]) -> int: flags = [True for num in nums] i = 0 j = i + 1 while i < len(nums): if flags[i]: while j < len(nums): if nums[i] != nums[j] and flags[j]: flags[i], flags[j] = False, False break j += 1 i += 1 i = 0 while i < len(nums): if flags[i]: return nums[i] i += 1 return -1