一:解题思路
这道题目,有2种方法可以解决。第一种方法:循环遍历一遍数组,利用一个哈希表记录每个数字出现的次数,然后返回次数最多的那个数字。这个方法遍历了一遍数组时间复杂度为:O(n),用了一个哈希表,空间复杂度为:O(n)。
第二种方法:利用摩尔投票法。
二:完整代码示例 (C++版和Java版)
第一种方法:C++
class Solution { public: int majorityElement(vector<int>& nums) { map<int, int> hash_map; int maxValue = 0, maxCount = 0; for (int i = 0; i < nums.size(); i++) { int newCount=hash_map[nums[i]] + 1; hash_map[nums[i]] = newCount; if (newCount > maxCount) { maxCount = newCount; maxValue = nums[i]; } } return maxValue; } };
第一种方法:Java
class Solution { public int majorityElement(int[] nums) { int maxValue=0,maxCount=0; Map<Integer,Integer> hash_map=new HashMap<>(); for(int i=0;i<nums.length;i++) { int newCount=hash_map.getOrDefault(nums[i],0)+1; hash_map.put(nums[i],newCount); if(newCount>maxCount) { maxCount=newCount; maxValue=nums[i]; } } return maxValue; } }
第二种方法:C++
class Solution { public: int majorityElement(vector<int>& nums) { int num = nums[0], count = 1; for (int i = 1; i < nums.size(); i++) { if (count == 0) { num = nums[i]; count = 1; } else if (nums[i] == num) { count++; } else { count--; } } return num; } };
第二种方法:Java
class Solution { public int majorityElement(int[] nums) { int num=nums[0],count=1; for(int i=1;i<nums.length;i++) { if(count==0) { num=nums[i]; count=1; } else if(num==nums[i]) { count++; } else { count--; } } return num; } }