169. 求众数

mac2022-06-30  38

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例 1:

输入: [3,2,3] 输出: 3 示例 2:

输入: [2,2,1,1,1,2,2] 输出: 2

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 我的思路: 用一个哈希表 然后将每个元素及其次数存入 再遍历一遍找出现次数最多的元素

class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> ans=new HashMap<Integer,Integer>(); for(int i=0;i<nums.length;i++) { if(ans.containsKey(nums[i])) ans.put(nums[i],ans.get(nums[i])+1); else ans.put(nums[i],1); } int more=0; int times=0; Set<Integer> keys=ans.keySet(); Iterator<Integer> it=keys.iterator(); while(it.hasNext()) { int key=it.next(); int temp=ans.get(key); if(times<temp) { times=temp; more=key; } } return more; }}

牛逼解法:

public int majorityElement(int[] nums) { int count = 1; int maj = nums[0]; for (int i = 1; i < nums.length; i++) { if (maj == nums[i]) count++; else { count--; if (count == 0) { maj = nums[i + 1]; } } } return maj; }

投票原理 将众数记为1 其他数 -1

最新回复(0)