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.
题目解析:
找出数组中出现次数超过数组长度一半的那个数。
方法:
1,朴素方法,设立一个数组,没出现一个新数字,讲该数字放入数组中,然后计数,当数组中计数 >= 数组长度的一半的时候,停止,输出该数字。时间复杂度为(n*n)
2,优秀方法,对数组进行排序,排序之后中间的数字nums(nums.length/2)就是该数字。时间复杂度为(nlogn)
3,机智方法,依次遍历每个数,设置标记变量count和n,count=0,n=第一个数字,当n与下一个数字相等时count+1,当n与下一个数字不想等时count-1,当count=0时,n=下一个数。最后输出n。
这里给出方法2,和方法3的代码。
方法2
public class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
int ans=nums[nums.length/2];
return ans;
}
}
方法3
public class Solution {
public int majorityElement(int[] nums) {
int count =0 ,n=nums[0];
for(int i=0;i<nums.length;i++)
{
if(count==0)
n=nums[i];
if(nums[i]!=n)
count--;
else
count ++;
}
return n;
}
}