个人博客主页:https://blog.csdn.net/2301_79293429?type=blog
专栏:https://blog.csdn.net/2301_79293429/category_12545690.html
个人力扣题解主页:我的题解 - 力扣 (LeetCode)
抓住关键点:大于n/2
因为最后答案的元素是大于n/2的,所以中间那个数一定是答案
相互抵消,因为答案的个数大于n/2,所以答案一定是最后剩下来的
思路
抓住关键点:大于n/2
解题方法
法一:排序+取中间值/因为最后答案的元素是大于n/2的,所以中间那个数一定是答案****/
法二:投票法,(相互抵消,因为答案的个数大于n/2,所以答案一定是最后剩下来的)
Code
C
//法一:排序+取中间值/****因为最后答案的元素是大于n/2的,所以中间那个数一定是答案********/
// int cmp(const void* e1, const void* e2)
// {
// return *(int*)e1 - *(int*)e2;
// }
// int majorityElement(int* nums, int numsSize)
// {
// qsort(nums, numsSize, sizeof(nums[0]), cmp);
// return nums[numsSize / 2];
// }
//法二:投票法,(相互抵消,因为答案的个数大于n/2,所以答案一定是最后剩下来的)
int majorityElement(int* nums, int numsSize)
{
int a = nums[0];
int count = 1;/**/;
for (int i = 1; i < numsSize; i++)
{/*从1开始*/
if (nums[i] == a)
{
count++;
}
else
{
count--;
if (count < 0)
{
a = nums[i];/**/
count = 1;/**/
}
}
}
return a;
}
恭喜你今天又进步了一点点啦~