leetcode169 -- 多数元素Java + Python

题目描述:
leetcode169 -- 多数元素Java + Python_第1张图片
方法一:
如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为 n/2 向下取整处一定是众数
解释: 奇数/偶数个都是符合的
leetcode169 -- 多数元素Java + Python_第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

得到的就是键值对中值最大的那个对应的键打印出来

你可能感兴趣的:(算法题知识点,+,算法题刷题,java,python,散列表,算法)