题目描述:
方法一:
如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为 n/2 向下取整处一定是众数
解释: 奇数/偶数个都是符合的
代码实现:
class Solution {
public int majorityElement(int[] nums) {
// 方法一:可以从排序以后数据的特点来进行思考
// 先将数组里面的元素进行相应排序,直接使用java内部函数
Arrays.sort(nums);
return nums[nums.length / 2];
}
}
- 从多数元素的特点来进行考虑
方法二: - 使用哈希表,键值对的形式: 可以用哈希表来快速统计每个元素出现的次数
- 我们可以使用哈希映射来存储每个元素以及出现的次数,对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数
- 创建一个哈希表,使用python来对哈希表进行处理会更加方便,因为其内部有更多封装好的东西
代码实现:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
# Counter是dict只的一个子类,主要就是用于对你访问的对象频率来进行计数
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)
注意点:
- Counter是dict只的一个子类,主要就是用于对你访问的对象频率来进行计数
def majorityElement(nums):
counts = collections.Counter(nums)
return counts
# 测试
print(majorityElement([2, 3, 4, 4, 3]))
Counter({3: 2, 4: 2, 2: 1})
- counts.keys() 用来生成哈希表里面的键是什么,生成的都是不重复元素
def majorityElement(nums): counts = collections.Counter(nums) return counts.keys() # 测试 print(majorityElement([2, 3, 4, 4, 3])) dict_keys([2, 3, 4])
- max函数中使用key, max(a, key = a.get)
其中:a是一个可迭代对象,key功能是用于评估a中最大项目的值
# 对于max(a, key = a.get)应用的测试
a = {3:1, 4:2}
print(max(a, key = a.get))
# 测试
4
得到的就是键值对中值最大的那个对应的键打印出来



