给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
样例
样例 1:
输入: [1, 1, 1, 1, 2, 2, 2]
输出: 1
样例 2:
输入: [1, 1, 1, 2, 2, 2, 2]
输出: 2
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
注意事项
你可以假设数组非空,且数组中总是存在主元素。
解决办法一:
public class Solution {
/*
* @param nums: a list of integers
* @return: find a majority number
*/
public int majorityNumber(List<Integer> nums) {
// write your code here
Collections.sort(nums);
return nums.get(nums.size()/2);
}
}
思路:先做排序,然后输出中间的数,即为主元素。
解决方法二:
public class Solution {
/*
* @param nums: a list of integers
* @return: find a majority number
*/
public int majorityNumber(List<Integer> nums) {
// write your code here
int temp=0;
int count=0;
for (int i=0;i<nums.size();i++){
if (count==0){
temp=nums.get(i);
count=1;
} else{
if (temp==nums.get(i)){
count++;
} else{
count--;
}
}
}
return temp;
}
}