题目
代码(首刷自解,空间复杂度O(n))
class Solution {
public:
int majorityElement(vector<int>& nums) {
int n = nums.size()/2;
unordered_map<int, int> map;
for(int& num : nums) {
if(map.count(num)) {
map[num]++;
if(map[num] > n)
return num;
} else {
map[num] = 1;
}
}
return nums[0];
}
};
代码(首刷看解析,空间复杂度O(1))
class Solution {
public:
int majorityElement(vector<int>& nums) {
int target = 0;
int count = 0;
for(int& num : nums) {
if(!count) {
target = num;
count = 1;
} else if(target == num) {
count++;
} else {
count--;
}
}
return target;
}
};
代码(二刷自解)
空间复杂度为O(1)
func majorityElement(nums []int) int {
num := 0
count := 0
for _, v := range nums {
if count == 0 {
num = v
count = 1
} else if num == v {
count++
} else {
count--
}
}
return num
}
哈希表
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int>& numbers) {
unordered_map<int, int> map;
for(int& num : numbers) {
map[num]++;
if(map[num] > numbers.size()/2)
return num;
}
return -1;
}
};