给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
思路;由于给出的数组中存在众数,并且众数这里的定义是在数组中出现的次数大于n/2,那么就是说给出的数组中,一定有一个数字出现的次数大于n/2。那么只要找出次数大于n/2的数字即可,一开始想到的是放入map中,然后遍历,后来通过提示,发现可以使用一个count计数,只要当count等于0时就将值定为当前索引的值,
这样就只需要执行一个for循环即可
public static int majorityElement(int[] nums) {
int count = 1;
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
if(max == nums[i]){
count ++;
}else {
count --;
if(count == 0){
max = nums[i];
count++;
}
}
return max;
}
排行却不是很高。。。
但是思路都差不多
class Solution {
public int majorityElement(int[] nums) {
if(nums.length == 1){
return nums[0];
}
int soldier = nums[0];
int num = 1;
for(int i = 1;i < nums.length;i++){
if(nums[i] == soldier){
num++;
}else{
if(num == 0){
soldier = nums[i];
num = 1;
}
num--;
}
}
return soldier;
}
}