提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题过程
解题思路
投票法:用一个multi变量记录众数,用一个votes变量记录投票数。若当前数组值是众数则使votes加一,否则减一。当所有数组值遍历完,则mlti变量记录的值即为众数。
// class Solution {
// public int majorityElement(int[] nums) {
// Map<Integer, Integer> map = new HashMap();
// for(int num : nums){
// if(map.containsKey(num)){
// map.put(num, map.get(num) + 1);
// }else{
// map.put(num, 1);
// }
// if(map.get(num) > nums.length / 2){
// return num;
// }
// }
// return 0;
// }
// }
class Solution {
public int majorityElement(int[] nums) {
int multi = 0, votes = 0;
for(int num : nums){
if(votes == 0) multi = num;//投票数为0的时候假设众数为num
if(num == multi){//如果总数等于当前num,则投票数加一,否则投票数减一
votes++;
}else{
votes--;
}
}
return multi;
}
}
总结
暂时没有总结,待续。。。