署名:csdn等网站博客copy产出,AI时代知识新搬运工
言归正传:写下这道题的个人理解
题干:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
【2,2,1,1,1,2,2]、【2,2,2,1,1,2,2]、【2,2,2,2,1,2,2]
输出: 2
理解:
1.该题重点是n/2.说明该多数元素肯定在数组中出现次数是其他元素总和要多一个;白话解释;数组中六个元素,多数肯定至少四个以上;
2.由1说明,我们统计数组中元素最多的个数和其他元素累计做差大于1;设多数元素个数为A,其他元素个数为B;
则,统计出A-B大于1即可;
伪代码:
1、假设num[0],为多数,初值统计该多数个数count = 1;
if 以后遇到 num[i] = num[0];
count ++
else
count--
2、if 到了count =0
num[i] ==duoshu;
重新再count ++
3、printf
代码
int majorityElement(int* nums, int numsSize){
int count = 1;
int duoshu =nums[0];
for(int i = 0;i < numsSize; i++) {
if(nums[i] == duoshu) {
count++;
} else {
count--;
if(count == 0) {
duoshu = nums[i];
count++;
}
}
}
return duoshu;
}