原题地址:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
题目描述:
代码:
参考:巧妙解题 比排序实现更高效
用count计数,当count为0时,res换下一个数;否则如果nums[i]和res是同一个数,那么count++;不是同一个数,count–。因为如果一个数的个数超过数组一半的话,它的count一直到最后也不会减到0。
class Solution {
public int majorityElement(int[] nums) {
int count = 0, res = 0;
for(int i = 0; i < nums.length; i ++)
{
if(count == 0)
{
res = nums[i];
count ++;
}
else
{
if(nums[i] == res) count ++;
else count --;
}
}
return res;
}
}
哈希:(复杂度比较高)
class Solution {
public int majorityElement(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i ++)
{
if(map.containsKey(nums[i]))
{
int t = map.get(nums[i]);
if(t ++ >= nums.length / 2) return nums[i];
map.put(nums[i], t);
}
else
map.put(nums[i], 1);
}
return nums[0];
}
}