题目描述:
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.
思路一:
class Solution {
public int majorityElement(int[] nums) {
int count = 1;
int res = nums[0];
for (int i = 1; i < nums.length; i++)
{
if (count == 0)
{
res = nums[i];
count = 1;
}
else if (nums[i] == res)
count++;
else
count--;
}
count = 0;
for (int num : nums)
if (num == res)
count++;
return count > nums.length / 2 ? res : 0;
}
}
//该方法超时
class Solution {
public int majorityElement(int[] nums) {
int[] newNums = new int[nums.length];
for (int i = 0; i < nums.length; i++)
newNums[i] = nums[i];
for (int i = 0; i < nums.length - 1; i++)
{
if (newNums[i] == 0) continue;
for (int j = i + 1; j < nums.length; j++)
if (newNums[j] != 0 && newNums[i] != newNums[j])
{
newNums[i] = newNums[j] = 0;
break;
}
}
int res = 0;
for (int i = 0; i < nums.length; i++)
{
if (newNums[i] != 0)
{
res = newNums[i];
break;
}
}
int count = 0;
for (int i = 0; i < nums.length; i++)
if (nums[i] == res)
count++;
return count > nums.length / 2 ? res : 0;
}
}
思路二:
先做排序
class Solution {
public int majorityElement(int[] nums) {
if (nums == null || nums.length == 0) return 0;
Arrays.sort(nums);
int count = 0;
for (int num : nums)
if (num == nums[nums.length / 2])
count++;
return (count > nums.length / 2) ? nums[nums.length / 2] : 0;
}
}
思路三:
利用HashMap
class Solution {
public int majorityElement(int[] nums) {
if (nums == null || nums.length == 0) return 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums)
{
if (map.containsKey(num))
map.put(num, map.get(num) + 1);
else
map.put(num, 1);
if (map.get(num) > nums.length / 2)
return num;
}
return 0;
}
}