先上题目
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
Example 1:
Input: [3,2,3] Output: 3
Example 2:
Input: [2,2,1,1,1,2,2] Output: 2
思路(暴力循环可以得出结果,但会超时)
1.前提为必定存在一个众数
2.设置一个标签,初始值为0。(用来判断当前数是否众数)循环数组,当与当前众数相同时count++;反之count--。
3.标签为0时,重新选择众数。(开始时假设nums[0]为众数)
4.在1的前提下,数组内部只有两种数字,众数和非众数,众数数量>n/2。最后当count!=0时,result必为众数.
代码部分一(超时)
class Solution {
public int majorityElement(int[] nums) {
int result =0;
for(int i =0;i <nums.length;i++){
int count =0;
for(int j =0;j <nums.length;j++){
if(nums[i] ==nums[j]){
count++;
}else{
count--;
}
}
if(count>0){
result =nums[i];
break;
}
}
return result;
}
}
代码部分二(5ms)
class Solution {
public int majorityElement(int[] nums) {
int result =0,count =0;
for(int i:nums){
if(count ==0){
result =i;
count++;
}else if(result !=i){
--count;
}else{
++count;
}
}
return result;
}
}