LeetCode-求众数
题目
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路
我们可以设置一个标志位temp,标记数组的第一个值出现一次,temp=1,result=num[0],然后开始遍历数组,如果相同元素temp+1,如果不同判断temp是否等于0,如果等于0那么temp重新等于1,result=num[i]。继续往下遍历,最终返回result即可。
类似抵消士兵一样,每遇见一个众数,我方士兵+1,遇见非众数,双方同归于尽。最终剩下的那个就是我们需要的众数。
题解
class Solution {
public int majorityElement(int[] nums) {
int temp = 1;
int result = nums[0];
for(int i = 1;i< nums.length; i++){
if(result!=nums[i]){
temp -= 1;
if(temp>0){
continue;
}
temp = 1;
result = nums[i];
}else{
temp++;
}
}
return result;
}
}