1.数组中出现次数超过一半的数字
理论上用摩尔投票法空间复杂度能得到简化,但是奈何实在难以看懂,暂时先用哈希解决吧
更新,20230522再次写这个时,已经是第三次了,理解了摩尔投票法后,发现原来不难,还是得沉淀啊。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
//摩尔投票法
int vote=0;//候选人票数
int candidate=-1;//候选人
for(auto num : numbers){
if(vote==0){
candidate=num;
vote++;
}
else{
if(candidate==num) vote++;
else{
vote--;
if(vote==0){
candidate=num;
vote++;
}
}
}
}
return candidate;
}
};
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int> map;
int majority=0,count=0;
for(int num : nums){
map[num]++;
if(map[num]>count){
majority=num;
count=map[num];
}
}
return majority;
}
};
2.构建乘积数组
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int length=a.size();
if(length==0) return {};
vector<int> b(length,1);
int temp=1;
for(int i=1;i<length;i++){
b[i]=b[i-1]*a[i-1];
}
for(int i=length-2;i>=0;i--){
temp*=a[i+1];
b[i]*=temp;
}
return b;
}
};